Heim > Backend-Entwicklung > Golang > So greifen Sie auf Felder mit verschachtelter Struktur in einem Array mit Schnittstellentyp zu

So greifen Sie auf Felder mit verschachtelter Struktur in einem Array mit Schnittstellentyp zu

WBOY
Freigeben: 2024-02-14 09:00:11
nach vorne
777 Leute haben es durchsucht

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.

Frageninhalt

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

}
Nach dem Login kopieren

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

Workaround

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

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!

Quelle:stackoverflow.com
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage