Golang reflektiert

Golang reflektiert
Willkommen bei einem anderen Golang -Tutorial. Wir werden in dieser Programmiersprache in diesem Fall etwas über Reflexion erfahren.

Was ist Reflexion?

Reflexion bezieht sich auf die Methode zur Analyse und Überprüfung von Variablen und deren Werten während der Laufzeit. Es ist eine sehr nützliche Technik beim Umgang mit abstrakten Komponenten einer Struktur. Dies bedeutet nicht, dass es auf Strukturen beschränkt ist. Lassen Sie uns verschiedene Komponenten der Reflexion in Golang diskutieren.

Erforderliche Importe

In Go wird die Fähigkeit zur Reflexion mit dem Reflect -Paket bereitgestellt. Daher müssen wir es vor der Verwendung importieren. Sie können es wie im folgenden Snippet importieren:

Import "reflektieren"

Nach dem Import können Sie mit den bereitgestellten Methoden und Funktionen beginnen.

Art der()

Eine Methode aus dem reflektierenden Paket ist der Typof (). Mit dieser Funktion können Sie den Typ einer Variablen bestimmen.

Um es zu verwenden, können wir:

Paket Main
importieren (
"fmt"
"reflektieren"
)
func main ()
var1: = 100
var2: = 3.14159
var3: = "Hallo"
var4: = […] int 1, 2, 3
var5: = map [string] string
var6: = true
var7: = [] int 1, 2, 4
fmt.Println ("type =>", reflektieren.Typof (var1))
fmt.Println ("type =>", reflektieren.Typof (var2))
fmt.Println ("type =>", reflektieren.Typof (var3))
fmt.Println ("type =>", reflektieren.Typof (var4))
fmt.Println ("type =>", reflektieren.Typof (var5))
fmt.Println ("type =>", reflektieren.Typof (var6))
fmt.Println ("type =>", reflektieren.Typof (var7))

Das obige Beispiel verwendet reflektiert.Typeof () Methode zum Überprüfen der Datentypen verschiedener Variablen. Die resultierende Ausgabe ist wie gezeigt:

Typ => int
Typ => float64
Typ => String
Typ => [3] int
Type => map [String] String
Typ => bool
Typ => [] int

Wert von()

Das reflektieren.ValueOF () Methode gibt den Wert einer bestimmten Variablen zurück. Ein Beispiel ist wie gezeigt:

fmt.Println ("value =>", reflektieren.Wert von (var4))

Dies sollte den Wert der Var4 -Variablen zurückgeben.

Ausgang:

Wert => [1 2 3]

Kopieren()

Die Kopiermethode wird verwendet, um die Elemente einer bestimmten Quelle in ein bestimmtes Ziel zu kopieren. Die Funktion führt den Kopiervorgang aus, bis das Ziel voller Elemente der Quelle ist.

Die Funktion gibt die Anzahl der Elemente zurück, die von der Quelle an das Ziel kopiert wurden.

Denken Sie daran, dass das Ziel und die Quelle vom gleichen Typ sein müssen.

Betrachten Sie das unten gezeigte Beispiel:

Paket Main
importieren (
"fmt"
"reflektieren"
)
func main ()
SRC: = reflektieren.Valueof ([] String "a", "b", "c")
dest: = reflektieren.Valueof ([] String "D", "e", "f")
items_copied: = reflektieren.Kopie (SRC, Dest)
fmt.Println ("Elemente kopiert:", items_copied)
fmt.Println ("Quelle:", SRC)
fmt.Println ("Ziel:", dest)

Im obigen Beispiel verwenden wir das reflektieren.Valueof (), um die Variable an ihren Typ zu geben. Wir verwenden dann die Methode Copy (), um die Elemente des Dests in die SRC -Variable zu kopieren. Die resultierende Ausgabe ist wie gezeigt:

Elemente kopiert: 3
Quelle: [D E F]
Ziel: [D E F]

Swapper ()

Mit der Swapper () -Methode können Sie Elemente in einer Scheibe tauschen. Ein Beispiel ist wie unten gezeigt:

lst: = [] int 1, 2, 3, 4, 5
lst_swp: = reflektieren.Tausch (LST)
fmt.Printf ("Vor dem Swap: %v \ n", LST)
lst_swp (0, 4)
fmt.Printf ("nach dem Swap: %v \ n", LST)

Das obige Beispiel übertaucht das Schicht vom ersten Index zum letzten aus. Der Ausgang ist wie gezeigt:

Vor dem Swap: [1 2 3 4 5]
Nach dem Swap: [5 2 3 4 1]

Numfield ()

Die Methode numfield () gibt die Anzahl der Felder innerhalb einer bestimmten Struktur zurück. Ein Beispiel ist wie gezeigt:

Geben Sie my_struct struct ein
FELD_1 STRING
Field_2 int
field_3 float64
field_4 bool

struct_1: = my_struct "a", 1, 3.14, falsch
Cast: = reflektieren.Typeof (struct_1)
fmt.Println (Cast.Numfield ())

Das obige sollte die Anzahl der Felder in der Struktur zurückgeben. Ausgang:

4

Feld()

Die Methode Field () gibt den Namen und den Datentyp der Felder in einer Struktur zurück.

struct_1: = my_struct "a", 1, 3.14, falsch
Cast: = reflektieren.Typeof (struct_1)
für i: = 0; ich < cast.NumField(); i++
Feld: = Cast.Feld (i)
fmt.Println (Feld.Name, Feld.Typ)

Das obige Programm gibt den Namen der Felder in der Struktur und deren Datentypen zurück. Ausgang:

FELD_1 STRING
Field_2 int
field_3 float64
field_4 bool

Makechan ()

Die Makechan () -Methode erstellt einen angegebenen Typkanal und Puffergrößenkanal. Beispiel:

var str chan String
var str_type reflektiert.Wert = reflektiert.Valueof (& str)
New_Channel: = reflektieren.Makechan (reflektieren.Indirekt (str_type).Typ (), 256)
fmt.Println ("Channel -Art:", New_Channel.Art())
fmt.Println ("Channel Cap:", New_Channel.Deckel())

Das obige sollte einen Kanal des Chan -Typs und eine Puffergröße von 256 erstellen. Die resultierende Ausgabe ist wie gezeigt:

Kanalart: Chan
Kanalkappe: 256

Makemap ()

Wie der Name schon sagt, erstellt die Funktion makemap () eine Karte des definierten Datentyps.

Nehmen Sie das folgende Beispiel:

var st Map [String] String
var str_type reflektiert.Wert = reflektiert.Valueof (& str)
my_map: = reflektieren.Makemap (reflektieren.Indirekt (str_type).Typ())
fmt.Println ("sort =>", my_map.Art())

Dies schafft eine neue Karte. Ausgang:

Art => Karte

Abschluss

In diesem Leitfaden haben wir die Oberfläche der Verwendung des reflektierenden Pakets in Go kratzt. Denken Sie daran, dass das Paket viel mehr bietet als das, was hier besprochen wird.