Golang Reflect

Golang Reflect
Witamy w innym samouczku Golang. Dowiemy się o refleksji w języku programowania Go.

Co to jest refleksja?

Refleksja odnosi się do metody analizy i kontroli zmiennych oraz ich wartości w czasie wykonywania. Jest to bardzo przydatna technika w przypadku abstrakcyjnych elementów struktury. Nie oznacza to, że ogranicza się do struktur. Omówmy różne elementy refleksji w Golang.

Wymagane import

W Go możliwość przeprowadzenia refleksji jest dostarczana przy użyciu pakietu Reflect. Dlatego musimy go zaimportować przed użyciem. Możesz go zaimportować, jak pokazano na fragmencie poniżej:

Importuj „Zastanów się”

Po zaimportowaniu możesz zacząć stosować dostarczone metody i funkcje.

Typ()

Jedną metodą z pakietu Reflect jest typeOF (). Ta funkcja pozwala określić typ zmiennej.

Aby go użyć, możemy zrobić:

Pakiet Main
import (
„FMT”
"odbijać"
)
func main ()
var1: = 100
var2: = 3.14159
var3: = "Hello"
var4: = […] int 1, 2, 3
var5: = map [string] String
var6: = true
var7: = [] int 1, 2, 4
fmt.Println („type =>”, Reporvey.Typeof (var1))
fmt.Println („type =>”, Reporvey.Typeof (var2))
fmt.Println („type =>”, Reporvey.Typeof (var3))
fmt.Println („type =>”, Reporvey.Typeof (var4))
fmt.Println („type =>”, Reporvey.Typeof (var5))
fmt.Println („type =>”, Reporvey.Typeof (var6))
fmt.Println („type =>”, Reporvey.Typeof (var7))

Powyższy przykład używa odzwierciedlenia.Typeof () metoda sprawdzania typów danych różnych zmiennych. Powstałe wyjście jest jak pokazano:

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

Wartość()

Refleksja.Metoda valueof () zwraca wartość określonej zmiennej. Przykładem jest jak pokazano:

fmt.Println („value =>”, Reporvey.Wartość (var4))

Powinno to zwrócić wartość zmiennej var4.

Wyjście:

Wartość => [1 2 3]

Kopiuj()

Metoda kopiowania służy do kopiowania elementów określonego źródła do określonego miejsca docelowego. Funkcja będzie wykonywać operację kopiowania, aż miejsce docelowe będzie pełne elementów ze źródła, będą wyczerpane.

Funkcja zwraca liczbę elementów skopiowanych ze źródła do miejsca docelowego.

Pamiętaj, że miejsce docelowe i źródło muszą być tego samego typu.

Rozważ przykład pokazany poniżej:

Pakiet Main
import (
„FMT”
"odbijać"
)
func main ()
src: = refleksja.ValueOF ([] String „A”, „B”, „C”)
dest: = refleksja.ValueOF ([] string „d”, „e”, „f”)
Items_copied: = Reflect.Kopia (src, dest)
fmt.Println („Elementy skopiowane:”, Items_Copied)
fmt.Println („źródło:”, src)
fmt.Println („docelowe:”, dest)

W powyższym przykładzie używamy refleksji.Valueof (), aby rzucić zmienną do jej typu. Następnie używamy metody kopiowania () do kopiowania elementów DED do zmiennej SRC. Powstałe wyjście jest jak pokazano:

Kopiowane elementy: 3
Źródło: [d e f]
Miejsce docelowe: [d e f]

Swapper ()

Metoda Swapper () pozwala zamienić elementy w plasterze. Przykładem jest to, jak pokazano poniżej:

lst: = [] int 1, 2, 3, 4, 5
LST_SWP: = Odbijaj.Swapper (LST)
fmt.Printf („przed zamianą: %v \ n”, lst)
LST_SWP (0, 4)
fmt.Printf („After Swap: %v \ n”, LST)

Powyższy przykład zamienia plasterek z pierwszego indeksu na ostatni. Wyjście jest tak, jak pokazano:

Przed zamianą: [1 2 3 4 5]
Po zamianie: [5 2 3 4 1]

Numfield ()

Metoda Numfield () zwraca liczbę pól w danej strukturze. Przykładem jest jak pokazano:

Wpisz my_struct struct
Field_1 String
Field_2 int
Field_3 Float64
Field_4 Bool

struct_1: = my_struct „a”, 1, 3.14, false
Cast: = Reflect.Typeof (struct_1)
fmt.Println (obsada.Numfield ())

Powyższe powinno zwrócić liczbę pól w strukturze. Wyjście:

4

Pole()

Metoda pola () zwraca nazwę i typ danych pól w strukturze.

struct_1: = my_struct „a”, 1, 3.14, false
Cast: = Reflect.Typeof (struct_1)
dla i: = 0; I < cast.NumField(); i++
pole: = odlew.Pole (i)
fmt.Println (pole.Nazwa, pole.Typ)

Powyższy program zwraca nazwę pól w strukturze i ich typach danych. Wyjście:

Field_1 String
Field_2 int
Field_3 Float64
Field_4 Bool

Makechan ()

Metoda Makechan () tworzy określony kanał typu i kanał rozmiaru buforów. Przykład:

var str chan string
var str_type Reflect.Wartość = Refleksja.Wartość (i str)
new_channel: = refleksja.Makechan (odbijają się.Pośredni (str_type).Typ (), 256)
fmt.Println („kanał Kind:”, New_Channel.Uprzejmy())
fmt.Println („kanał cap:”, New_Channel.Czapka())

Powyższe powinno utworzyć kanał typu chan i rozmiar bufora 256. Powstałe wyjście jest jak pokazano:

Kanałowy rodzaj: Chan
Kanałowa czapka: 256

Makemap ()

Jak sama nazwa wskazuje, funkcja Makemap () tworzy mapę zdefiniowanego typu danych.

Weź poniższy przykład:

var str mapa [string] String
var str_type Reflect.Wartość = Refleksja.Wartość (i str)
my_map: = refleksja.MakeMap (Replack.Pośredni (str_type).Typ())
fmt.Println ("cind =>", my_map.Uprzejmy())

To tworzy nową mapę. Wyjście:

Rodzaj => mapa

Wniosek

W tym przewodniku porysowaliśmy powierzchnię korzystania z pakietu odbijania w Go. Należy pamiętać, że pakiet oferuje znacznie więcej niż omówione tutaj.