Heim > Backend-Entwicklung > Golang > Ist meine eingebettete Schnittstellenmethode „echt'? Erkennen implementierter Methoden über Go Reflection

Ist meine eingebettete Schnittstellenmethode „echt'? Erkennen implementierter Methoden über Go Reflection

Mary-Kate Olsen
Freigeben: 2025-01-05 15:32:13
Original
843 Leute haben es durchsucht

Is My Embedded Interface Method

Go Reflection mit in Struktur eingebetteter Schnittstelle: Erkennen „echter“ Funktionen

Beim Einbinden einer eingebetteten Schnittstelle in eine Struktur (z. B. Typ B struct { A; bar string }), schlägt Go idiomatisch vor, dass B die Schnittstelle A implementieren muss. Das Reflection-Paket ruft jedoch Schnittstellenmethoden direkt von ab Bs Typ, was möglicherweise zu Verwirrung führt.

Um dies zu beheben, betrachten Sie das folgende Szenario:

type A interface {
     Foo() string
}

type B struct {
     A
     bar string
}
Nach dem Login kopieren

Angenommen, wir haben eine Instanz von B und möchten ihre Foo-Methode mithilfe von Reflektion erhalten:

bType := reflect.TypeOf(B{})
bMeth, has := bType.MethodByName("Foo")
Nach dem Login kopieren

Wenn has wahr ist, dann stellt sich folgende Frage: Wie können wir erkennen, ob in der zurückgegebenen Datei eine „echte“ Implementierung von Foo vorhanden ist? bMeth?

Die bereitgestellte Antwort schlägt einen einfachen Ansatz vor:

method_in_table := B.Foo
fmt.Printf("%T \n", method_in_table)
Nach dem Login kopieren

Dies gibt den Funktionstyp aus:

func(main.B) string
Nach dem Login kopieren

Wenn b.A Null ist, wie es bei der Fall ist Standardmäßig gibt es keine „echte“ Implementierung von Foo in der eingebetteten Schnittstelle. Dies kann überprüft werden mit:

if b.A != nil { b.Foo() }
Nach dem Login kopieren

Darüber hinaus stellt die Reflection-API selbst Mechanismen zur Erkennung eines Null-Schnittstellenwerts bereit:

if bMeth.Ptr.IsNil() { // there is no "real" implementation of Foo
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonIst meine eingebettete Schnittstellenmethode „echt'? Erkennen implementierter Methoden über Go Reflection. 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