Wie finde ich den Typ eines Objekts in Go? In Python rufe ich nur typeof
den Objekttyp ab. Gibt es in Go eine Möglichkeit, dasselbe zu implementieren?
Hier ist der Container, aus dem ich iteriere:
for e := dlist.Front(); e != nil; e = e.Next() {
lines := e.Value
fmt.Printf(reflect.TypeOf(lines))
}
Ich kann in diesem Fall den Typ der Objektzeilen, bei denen es sich um ein Array von Zeichenfolgen handelt, nicht ermitteln.
go
go-reflect
Rahul
quelle
quelle
fmt.Printf("%T\n", var)
Antworten:
Das Go-Reflection-Paket enthält Methoden zum Überprüfen des Variablentyps.
Das folgende Snippet druckt den Reflektionstyp einer Zeichenfolge, einer Ganzzahl und eines Gleitkommas aus.
Ausgabe:
Siehe: http://play.golang.org/p/XQMcUVsOja , um es in Aktion anzuzeigen.
Weitere Dokumentation hier: http://golang.org/pkg/reflect/#Type
quelle
Ich habe drei Möglichkeiten gefunden, um den Typ einer Variablen zur Laufzeit zurückzugeben:
Verwenden der Zeichenfolgenformatierung
Mit Paket reflektieren
Verwenden von Typzusicherungen
Jede Methode hat einen anderen besten Anwendungsfall:
Zeichenfolgenformatierung - kurzer und geringer Platzbedarf (zum Importieren des Reflect-Pakets nicht erforderlich)
Reflect-Paket - Wenn Sie weitere Details zum Typ benötigen, haben Sie Zugriff auf die vollständigen Reflection-Funktionen
Typzusicherungen - Ermöglicht die Gruppierung von Typen, z. B. das Erkennen aller int32-, int64-, uint32- und uint64-Typen als "int".
quelle
t
, sot := v.(type)
wirdv.(type)
und_ = t
wird nicht mehr benötigt.case 'T': p.fmt.fmtS(reflect.TypeOf(arg).String())
. Fmt-Paket mitVerwenden Sie das Reflect- Paket:
Produziert:
Spielplatz
Beispiel mit
ValueOf(i interface{}).Kind()
:Produziert:
Spielplatz
quelle
if reflect.TypeOf(err) == string
?So erhalten Sie eine Zeichenfolgendarstellung:
Von http://golang.org/pkg/fmt/
Ausgänge:
quelle
Ich würde mich vom Nachdenken fernhalten. Paket. Verwenden Sie stattdessen% T.
quelle
Am besten verwenden Sie das Reflexionskonzept in Google.
reflect.TypeOf
gibt Typ zusammen mit dem Paketnamenreflect.TypeOf().Kind()
gibt unterstrichenen Typquelle
Um es kurz zu machen, verwenden Sie bitte
fmt.Printf("%T", var1)
oder seine anderen Varianten im fmt-Paket.quelle
Sie können den Typ jeder Variablen / Instanz zur Laufzeit überprüfen, indem Sie entweder die Paketfunktion "Reflect"
TypeOf
verwenden oder Folgendes verwendenfmt.Printf()
:quelle
Um die Art der Felder in struct zu erhalten
Ausgabe
Siehe in IDE https://play.golang.org/p/bwIpYnBQiE
quelle
Sie können verwenden
reflect.TypeOf
.int
,string
): Es wird sein Name zurückgegeben (zB :int
,string
)<package name>.<struct name>
(zB:main.test
)quelle
Wenn wir diese Variablen haben:
quelle
Sie können verwenden:
interface{}..(type)
wie auf diesem Spielplatzquelle
reflektieren Paket kommt zur Rettung:
Überprüfen Sie diese Demo
quelle
Sie können einfach die Methode fmt package fmt.Printf () verwenden. Weitere Informationen: https://golang.org/pkg/fmt/
Beispiel: https://play.golang.org/p/aJG5MOxjBJD
quelle