Typdarstellung direkt aus dem Namen in Go über Reflexion erhalten
Es stellt sich die Frage, ob es möglich ist, die Reflexionsbibliotheken von Go zum Ableiten des Typs zu verwenden Darstellung eines Typs allein durch seinen Namen. Die Motivation hinter dieser Frage liegt in einer Bibliothek, in der Benutzer Typdarstellungen für Codegenerierungszwecke bereitstellen müssen.
Zur Laufzeit
Diese direkte Konvertierung ist zur Laufzeit mit a nicht möglich String-Darstellung des Typnamens. Typen, auf die während der Kompilierung nicht explizit verwiesen wird, sind möglicherweise nicht in der ausführbaren Binärdatei vorhanden, sodass sie zur Laufzeit „unbekannt“ sind. Eine ausführliche Erklärung finden Sie unter „Aufteilen von Client-/Servercode“. Problemumgehungen finden Sie unter „Alle Funktionen mit speziellem Präfix oder Suffix in Golang aufrufen“.
Während der Codierung
Während des Schreibens oder Generierens des Quellcodes ist dies jedoch möglich um dies zu erreichen, ohne eine Variable des angegebenen Typs zu erstellen und „reflect.TypeOf()“ aufzurufen. Indem man mit einem Zeiger auf den Typ beginnt und einen typisierten Nullzeigerwert verwendet, kann man mit Type.Elem() vom Typdeskriptor des Zeigers zum Deskriptor des Basistyps navigieren.
Hier ist ein Beispiel:
t := reflect.TypeOf((*YourType)(nil)).Elem()
Dieser Typdeskriptor, dargestellt durch die Variable t, entspricht dem t2-Deskriptor, der aus der Erstellung einer Variablen x des Typs abgeleitet wird YourType und Anwenden vonflect.TypeOf():
var x YourType t2 := reflect.TypeOf(x) fmt.Println(t, t2) fmt.Println(t == t2)
Ausgabe:
main.YourType main.YourType true
(Probieren Sie es auf dem Go Playground aus)
Das obige ist der detaillierte Inhalt vonKann Go Reflection die Darstellung eines Typs direkt aus seinem Namen ermitteln?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!