我想访问这些嵌套结构中的 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()) }