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.
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)) }
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}
Jeder Typ Der Aufruf von .Field() gibt ein Reflect.StructField zurück, das Details wie den Feldnamen enthält.
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)) }
Ausgabe:
1 2
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()
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!