首頁 >後端開發 >Golang >如何存取介面類型數組中嵌套結構的字段

如何存取介面類型數組中嵌套結構的字段

WBOY
WBOY轉載
2024-02-14 09:00:11780瀏覽

如何存取介面類型數組中嵌套結構的字段

php小編柚子為你解答如何存取介面類型陣列中嵌套結構的欄位。在處理介面傳回的資料時,有時會遇到嵌套結構的情況,也就是數組中包含了更深層的欄位。要存取這些嵌套的字段,我們可以使用點操作符或數組下標來逐層獲取。透過了解數組的層次結構和對應的鍵名,我們可以輕鬆地存取所需的欄位值,實現對介面傳回資料的靈活處理。接下來,我們將詳細介紹如何操作介面類型數組中的嵌套結構字段,讓你輕鬆應對各種資料處理場景。

問題內容

我想存取這些巢狀結構中的 FieldBase 欄位。

這是我的程式碼範例:

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

}

我想知道如何存取數組x中每個嵌套結構的FieldBase欄位值,其中x是介面類型。我嘗試使用類型斷言進行訪問,但只能在單個元素上嘗試。

if subStruct, ok := x[1].(SubStruct); ok {
    fmt.Println(subStruct.FieldBase)
} else {
    fmt.Println("Cannot access FieldBase")
}

解決方法

由於您的陣列屬於接口,因此您要么需要對每種類型進行類型斷言和句柄,要么需要一個介面方法。不過,我認為您想要且需要的是為每個公開 FieldBase 的結構類型提供一個介面方法,如下所示:

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

以上是如何存取介面類型數組中嵌套結構的字段的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除