Bestimmen der Art eines abgeleiteten Schnittstellentyps in Go
Die Navigation durch die Komplexität der Reflexion in Go kann eine Herausforderung sein, insbesondere wenn es um abgeleitete Schnittstellen geht Schnittstellen und primitive Typen. In diesem Artikel untersuchen wir, wie man den Typ „reflect.Kind“ bestimmt, der eine Schnittstelle implementiert, aber über eine zugrunde liegende primitive Implementierung verfügt.
Die Frage ergibt sich aus dem folgenden Codeausschnitt:
type ID interface { myid() } type id string func (id) myid() {} func main() { id := ID(id("test")) fmt.Println(id) fmt.Println(reflect.TypeOf(id)) // How to get the kind to return "reflect.Interface" from the var "id"? fmt.Println(reflect.TypeOf(id).Kind()) }
In diesem Szenario haben wir eine Schnittstelle namens ID und einen String-Typ namens id. Die Implementierung des ID-Typs verwendet jedoch den ID-String-Typ. Das Ziel besteht darin, den Reflect.Kind als Reflect.Interface aus der ID-Variablen abzurufen.
Lösung
Der Schlüssel zur Lösung dieses Problems liegt im Verständnis, wie Reflection mit der Schnittstelle umgeht Werte. Wenn ein Wert an reflekt.TypeOf() übergeben wird, wird dieser automatisch in eine Schnittstelle{} eingeschlossen. Um jedoch die Typinformationen beizubehalten, muss man einen Zeiger auf die Schnittstelle verwenden.
Indem wir einen Zeiger auf die ID-Schnittstelle definieren und ihn an reflekt.TypeOf() übergeben, können wir den Typdeskriptor mit Elem( erhalten ), um auf den tatsächlichen Typdeskriptor des Schnittstellentyps zuzugreifen.
Codebeispiel
Der folgende Codeausschnitt demonstriert dies Lösung:
id := ID(id("test")) fmt.Println(id) t := reflect.TypeOf(&id).Elem() fmt.Println(t) fmt.Println(t.Kind())
Dieser Code gibt Folgendes aus:
test main.ID interface
Durch die Verwendung dieser Technik können wir die Reflect.Art der abgeleiteten Schnittstellentypen genau bestimmen und ihre zugrunde liegenden Implementierungsdetails aufdecken.
Das obige ist der detaillierte Inhalt vonWie bestimme ich die „reflect.Kind' eines abgeleiteten Schnittstellentyps in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!