Jak znaleźć typ obiektu w Go? W Pythonie po prostu używam typeof
do pobierania typu obiektu. Podobnie w Go, czy istnieje sposób na wdrożenie tego samego?
Oto kontener, z którego iteruję:
for e := dlist.Front(); e != nil; e = e.Next() {
lines := e.Value
fmt.Printf(reflect.TypeOf(lines))
}
W tym przypadku nie jestem w stanie uzyskać typu linii obiektu, która jest tablicą ciągów.
go
go-reflect
Rahul
źródło
źródło
fmt.Printf("%T\n", var)
Odpowiedzi:
Pakiet refleksyjny Go zawiera metody sprawdzania typu zmiennych.
Poniższy fragment kodu wypisze typ odbicia ciągu, liczby całkowitej i liczby zmiennoprzecinkowej.
Wynik:
patrz: http://play.golang.org/p/XQMcUVsOja, aby zobaczyć to w akcji.
Więcej dokumentacji tutaj: http://golang.org/pkg/reflect/#Type
źródło
Znalazłem 3 sposoby zwracania typu zmiennej w czasie wykonywania:
Korzystanie z formatowania ciągów
Korzystanie z pakietu odzwierciedlającego
Korzystanie z asercji typu
Każda metoda ma inny najlepszy przypadek użycia:
formatowanie łańcucha - krótki i niski ślad (nie jest konieczne importowanie pakietu odbijającego)
pakiet odblaskowy - gdy potrzebujesz więcej informacji o typie, mamy dostęp do pełnych możliwości odbicia
asercje typów - pozwala grupować typy, na przykład rozpoznaje wszystkie typy int32, int64, uint32, uint64 jako „int”
źródło
t
, więct := v.(type)
staje sięv.(type)
i_ = t
nie jest już potrzebna.case 'T': p.fmt.fmtS(reflect.TypeOf(arg).String())
. pakiet fmt z wykorzystaniem typu odbicia do wydrukuUżyj pakietu odzwierciedlającego :
Produkuje:
Plac zabaw
Przykład użycia
ValueOf(i interface{}).Kind()
:Produkuje:
Plac zabaw
źródło
if reflect.TypeOf(err) == string
?Aby uzyskać ciąg znaków:
Od http://golang.org/pkg/fmt/
Wyjścia:
źródło
Trzymałbym się z dala od odbicia. pakiet. Zamiast tego użyj% T
źródło
Najlepszym sposobem jest użycie koncepcji refleksji w Google.
reflect.TypeOf
podaje typ wraz z nazwą pakietureflect.TypeOf().Kind()
podaje typ podkreśleniaźródło
Krótko mówiąc, użyj
fmt.Printf("%T", var1)
lub jego innych wariantów w pakiecie fmt.źródło
Możesz sprawdzić typ dowolnej zmiennej / instancji w środowisku wykonawczym, używając
TypeOf
funkcji pakietów „reflect” lubfmt.Printf()
:źródło
Aby uzyskać typ pól w struct
Wynik
Zobacz w IDE https://play.golang.org/p/bwIpYnBQiE
źródło
możesz użyć
reflect.TypeOf
.int
,string
) zwróci swoją nazwę (npint
,string
)<package name>.<struct name>
(np .main.test
:)źródło
Jeśli mamy te zmienne:
źródło
Możesz użyć:
interface{}..(type)
jak na tym placu zabawźródło
pakiet odzwierciedla przychodzi na ratunek:
Sprawdź to demo
źródło
Możesz po prostu użyć metody fmt pakiet fmt.Printf (), więcej informacji: https://golang.org/pkg/fmt/
przykład: https://play.golang.org/p/aJG5MOxjBJD
źródło