Heim > Backend-Entwicklung > Golang > Wie rufe ich mit Go Reflection Felder von einer Schnittstelle ab?

Wie rufe ich mit Go Reflection Felder von einer Schnittstelle ab?

Barbara Streisand
Freigeben: 2024-12-16 22:21:18
Original
587 Leute haben es durchsucht

How to Retrieve Fields from an Interface Using Go Reflection?

So rufen Sie Felder von einer Schnittstelle ab

Beim Umgang mit einem Antwortobjekt oder einer Antwortschnittstelle kann es erforderlich sein, die verfügbaren Felder zu identifizieren. Während Reflexion eine Option ist, ist es erforderlich, die Feldnamen im Voraus zu kennen. In diesem Artikel wird erläutert, wie Sie mithilfe von Reflection alle über eine Schnittstelle zugänglichen Felder abrufen.

Verwenden der Methode „reflect.TypeOf()“

Um einen Typdeskriptor zu erhalten, verwenden Sie die Funktion „reflect.TypeOf()“. . Dieser Deskriptor kann verwendet werden, um Felder des in der Schnittstelle gespeicherten dynamischen Werts aufzulisten.

Betrachten Sie das folgende Beispiel:

type Point struct {
    X int
    Y int
}

var reply interface{} = Point{1, 2}
t := reflect.TypeOf(reply)
for i := 0; i < t.NumField(); i++ {
    fmt.Printf("%+v\n", t.Field(i))
}
Nach dem Login kopieren

Ausgabe:

{Name:X PkgPath: Type:int Tag: Offset:0 Index:[0] Anonymous:false}
{Name:Y PkgPath: Type:int Tag: Offset:4 Index:[1] Anonymous:false}
Nach dem Login kopieren

Jeder Typ Der Aufruf von .Field() gibt ein Reflect.StructField zurück, das Details wie den Feldnamen enthält.

Feld abrufen Werte

Um die Feldwerte zu erhalten, verwenden Sie „reflect.ValueOf()“, um einen „reflect.Value“ zu erhalten. Sie können dann Value.Field() oder Value.FieldByName() verwenden:

v := reflect.ValueOf(reply)
for i := 0; i < v.NumField(); i++ {
    fmt.Println(v.Field(i))
}
Nach dem Login kopieren

Ausgabe:

1
2
Nach dem Login kopieren

Verarbeitung von Zeigern auf Strukturen

Häufig Zeiger auf Strukturen sind in Schnittstellen verpackt. Um zum angegebenen Typ oder Wert zu navigieren, verwenden Sie Type.Elem() und Value.Elem():

t := reflect.TypeOf(reply).Elem()

v := reflect.ValueOf(reply).Elem()
Nach dem Login kopieren

Durch die Verwendung von Reflektion können Sie alle Felder von einer Schnittstelle abrufen, unabhängig davon, ob sie explizit sind bekannt. Dies bietet eine leistungsstarke Möglichkeit, beliebige Datenstrukturen zu überprüfen. Weitere Informationen zu Gos Reflexion finden Sie im Blogbeitrag „Die Gesetze der Reflexion“.

Das obige ist der detaillierte Inhalt vonWie rufe ich mit Go Reflection Felder von einer Schnittstelle ab?. 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