Golang reflekterer

Golang reflekterer
Velkommen til en annen Golang -opplæring. Vi vil lære om refleksjon i Go -programmeringsspråket i denne.

Hva er refleksjon?

Refleksjon refererer til metoden for å analysere og inspisere variabler og deres verdier under kjøretid. Det er en veldig nyttig teknikk når du arbeider med abstrakte komponenter i en struktur. Dette betyr ikke at det er begrenset til strukturer. La oss diskutere forskjellige komponenter av refleksjon i Golang.

Påkrevd import

I Go leveres muligheten til å utføre refleksjon ved hjelp av refleksjonspakken. Derfor må vi importere det før bruk. Du kan importere den som vist i utdraget nedenfor:

Importer "Reflect"

Når du er importert, kan du begynne å bruke de medfølgende metodene og funksjonalitetene.

Typeof ()

En metode fra refleksjonspakken er typen (). Denne funksjonen lar deg bestemme typen en variabel.

For å bruke det, kan vi gjøre:

pakkehoved
import (
"FMT"
"reflektere"
)
func main ()
var1: = 100
var2: = 3.14159
var3: = "Hei"
var4: = […] int 1, 2, 3
var5: = kart [streng] streng
var6: = sant
var7: = [] int 1, 2, 4
fmt.Println ("type =>", reflekterer.Typeof (var1))
fmt.Println ("type =>", reflekterer.Typeof (var2))
fmt.Println ("type =>", reflekterer.Typeof (var3))
fmt.Println ("type =>", reflekterer.Typeof (var4))
fmt.Println ("type =>", reflekterer.Typeof (var5))
fmt.Println ("type =>", reflekterer.Typeof (var6))
fmt.Println ("type =>", reflekterer.Typeof (var7))

Eksemplet ovenfor bruker refleksjon.TypeOf () -metode for å sjekke datatypene til forskjellige variabler. Den resulterende utgangen er som vist:

Type => int
Type => float64
Type => streng
Type => [3] int
Type => kart [streng] streng
Type => bool
Type => [] int

Verdien av()

Reflekten.ValueOf () -metoden returnerer verdien av en spesifikk variabel. Et eksempel er som vist:

fmt.Println ("verdi =>", reflekterer.Valueof (var4))

Dette skal returnere verdien av var4 -variabelen.

Produksjon:

Verdi => [1 2 3]

Kopiere()

Kopi -metoden brukes til å kopiere elementene i en spesifikk kilde til et spesifisert reisemål. Funksjonen vil utføre kopieroperasjonen til destinasjonen er full av elementene fra kilden er utmattet.

Funksjonen returnerer antall elementer som er kopiert fra kilden til destinasjonen.

Husk at destinasjonen og kilden må være av samme type.

Tenk på eksemplet som er vist nedenfor:

pakkehoved
import (
"FMT"
"reflektere"
)
func main ()
SRC: = Reflekter.ValueOf ([] String "A", "B", "C")
dest: = reflektere.ValueOf ([] String "D", "E", "F")
Items_copied: = Reflekter.Kopi (SRC, dest)
fmt.Println ("Elements Copied:", Items_Copied)
fmt.Println ("Kilde:", SRC)
fmt.Println ("Destinasjon:", dest)

I eksemplet over bruker vi refleksjonen.ValueOf () for å kaste variabelen til sin type. Vi bruker deretter Copy () -metoden for å kopiere elementene i DEST til SRC -variabelen. Den resulterende utgangen er som vist:

Elementer kopiert: 3
Kilde: [D E F]
Destinasjon: [D E F]

Swapper ()

Swapper () -metoden lar deg bytte elementer i en skive. Et eksempel er som vist nedenfor:

LST: = [] int 1, 2, 3, 4, 5
LST_SWP: = Reflekter.Swapper (LST)
fmt.Printf ("før bytte: %v \ n", lst)
LST_SWP (0, 4)
fmt.Printf ("Etter bytte: %v \ n", lst)

Eksemplet over bytter skiven fra den første indeksen til den siste. Utgangen er som vist:

Før bytte: [1 2 3 4 5]
Etter bytte: [5 2 3 4 1]

Numfield ()

Numfield () -metoden returnerer antall felt innenfor en gitt struktur. Et eksempel er som vist:

Skriv My_struct struct
felt_1 streng
felt_2 int
FELT_3 FLOAT64
FELT_4 BOOL

struct_1: = my_struct "a", 1, 3.14, falsk
Rollebesetning: = Reflekter.Typeof (struct_1)
fmt.Println (støpt.Numfield ())

Ovennevnte skal returnere antall felt i strukturen. Produksjon:

4

Felt()

Feltet () -metoden returnerer navnet og datatypen av felt i en struktur.

struct_1: = my_struct "a", 1, 3.14, falsk
Rollebesetning: = Reflekter.Typeof (struct_1)
for i: = 0; Jeg < cast.NumField(); i++
Felt: = støpt.Felt (i)
fmt.Println (felt.Navn, felt.Type)

Ovennevnte program returnerer navnet på feltene i strukturen og deres datatyper. Produksjon:

felt_1 streng
felt_2 int
FELT_3 FLOAT64
FELT_4 BOOL

Makechan ()

Makean () -metoden oppretter en spesifisert typekanal og buffers størrelseskanal. Eksempel:

var str chan streng
var str_type reflektere.Verdi = reflektere.Valueof (& Str)
new_channel: = reflektere.Makechan (reflekterer.Indirekte (str_type).Type (), 256)
fmt.Println ("Channel Kind:", new_channel.Snill())
fmt.Println ("Channel Cap:", new_channel.Lokk())

Ovennevnte skal lage en kanal av Chan -type og en bufferstørrelse på 256. Den resulterende utgangen er som vist:

Kanalkind: Chan
Kanalhette: 256

Makemap ()

Som navnet antyder, lager makemap () -funksjonen et kart over den definerte datatypen.

Ta eksemplet nedenfor:

var str kart [streng] streng
var str_type reflektere.Verdi = reflektere.Valueof (& Str)
my_map: = reflektere.Makemap (reflekterer.Indirekte (str_type).Type())
fmt.Println ("Kind =>", my_map.Snill())

Dette skaper et nytt kart. Produksjon:

Kind => Kart

Konklusjon

I denne guiden klødde vi på overflaten av å bruke refleksjonspakken i Go. Husk at pakken tilbyr mye mer enn det som diskuteres her.