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

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

WBOY
發布: 2024-02-14 09:00:11
轉載
793 人瀏覽過

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

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

問題內容

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

這是我的程式碼範例:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

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是介面類型。我嘗試使用類型斷言進行訪問,但只能在單個元素上嘗試。

1

2

3

4

5

if subStruct, ok := x[1].(SubStruct); ok {

    fmt.Println(subStruct.FieldBase)

} else {

    fmt.Println("Cannot access FieldBase")

}

登入後複製

解決方法

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

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
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板