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
WBOYnach vorne
2024-02-14 09:00:11782Durchsuche

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

}

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")
}

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())
}

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen