Heim > Backend-Entwicklung > Golang > Wie bestimme ich die „reflect.Kind' eines abgeleiteten Schnittstellentyps in Go?

Wie bestimme ich die „reflect.Kind' eines abgeleiteten Schnittstellentyps in Go?

Susan Sarandon
Freigeben: 2025-01-02 12:34:40
Original
328 Leute haben es durchsucht

How to Determine the `reflect.Kind` of a Derived Interface Type in Go?

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())
}
Nach dem Login kopieren

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())
Nach dem Login kopieren

Dieser Code gibt Folgendes aus:

test
main.ID
interface
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage