Heim >Backend-Entwicklung >Golang >So greifen Sie auf Felder mit verschachtelter Struktur in einem Array mit Schnittstellentyp zu
Der PHP-Editor Youzi erklärt Ihnen, wie Sie auf Felder verschachtelter Strukturen in Schnittstellentyp-Arrays zugreifen. Bei der Verarbeitung der von der Schnittstelle zurückgegebenen Daten stößt man manchmal auf verschachtelte Strukturen, das heißt, das Array enthält tiefere Felder. Um auf diese verschachtelten Felder zuzugreifen, können wir den Punktoperator oder die Array-Subskription verwenden, um sie Schicht für Schicht abzurufen. Durch das Verständnis der hierarchischen Struktur des Arrays und der entsprechenden Schlüsselnamen können wir leicht auf die erforderlichen Feldwerte zugreifen und eine flexible Verarbeitung der von der Schnittstelle zurückgegebenen Daten erreichen. Als Nächstes stellen wir detailliert vor, wie verschachtelte Strukturfelder in Schnittstellentyp-Arrays betrieben werden, sodass Sie problemlos mit verschiedenen Datenverarbeitungsszenarien umgehen können.
Ich möchte auf die FieldBase-Felder in diesen verschachtelten Strukturen zugreifen.
Das ist mein Codebeispiel:
type InterfaceA interface { FunA() } type BaseStruct struct { FieldBase string } type SubStruct struct { BaseStruct } func (c SubStruct) FunA() { } type SubStruct2 struct { BaseStruct } func (c SubStruct2) FunA() { } func main() { var x = [2]InterfaceA{ SubStruct{BaseStruct: BaseStruct{FieldBase: "aaa"}}, SubStruct2{BaseStruct: BaseStruct{FieldBase: "bbb"}}, } // TODO: Access fields of nested classes in the array }
Ich möchte wissen, wie man auf den FieldBase-Feldwert jeder verschachtelten Struktur in einem Array x zugreift, wobei x der Schnittstellentyp ist. Ich habe versucht, Typzusicherungen für den Zugriff zu verwenden, aber ich kann es nur für ein einzelnes Element versuchen.
if subStruct, ok := x[1].(SubStruct); ok { fmt.Println(subStruct.FieldBase) } else { fmt.Println("Cannot access FieldBase") }
Da Ihr Array zu einer Schnittstelle gehört, benötigen Sie entweder Typzusicherungen und Handles für jeden Typ oder eine Schnittstellenmethode. Ich denke jedoch, dass Sie eine Schnittstellenmethode für jeden Strukturtyp haben möchten und müssen, der FieldBase verfügbar macht, etwa so:
package main import "fmt" type InterfaceA interface { FunA() GetFieldBase() string } type BaseStruct struct { FieldBase string } type SubStruct struct { BaseStruct } func (c SubStruct) FunA() { } func (c SubStruct) GetFieldBase() string { return c.FieldBase } type SubStruct2 struct { BaseStruct } func (c SubStruct2) FunA() { } func (c SubStruct2) GetFieldBase() string { return c.FieldBase } func main() { var x = [2]InterfaceA{ SubStruct{BaseStruct: BaseStruct{FieldBase: "aaa"}}, SubStruct2{BaseStruct: BaseStruct{FieldBase: "bbb"}}, } // TODO: Access fields of nested classes in the array fmt.Println(x[0].GetFieldBase()) fmt.Println(x[1].GetFieldBase()) }
Das obige ist der detaillierte Inhalt vonSo greifen Sie auf Felder mit verschachtelter Struktur in einem Array mit Schnittstellentyp zu. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!