面试题答案
一键面试访问A中的方法和字段
当结构体B嵌入结构体A作为匿名字段时,可以通过B的实例直接访问A中的方法和字段。
访问优先级
- 字段访问优先级:如果B结构体中定义了与A结构体中同名的字段,通过B实例访问该字段时,优先访问B中定义的字段。只有当B中不存在该名字的字段时,才会去访问A中的字段。
- 方法访问优先级:如果B结构体中定义了与A结构体中同名的方法,通过B实例调用该方法时,优先调用B中定义的方法。只有当B中不存在该名字的方法时,才会去调用A中的方法。
示例代码
package main
import "fmt"
// 定义结构体A
type A struct {
FieldA string
}
// A的方法
func (a A) MethodA() {
fmt.Println("This is MethodA in struct A")
}
// 定义结构体B,嵌入结构体A
type B struct {
A
FieldB string
}
func main() {
b := B{
A: A{
FieldA: "Value from A",
},
FieldB: "Value from B",
}
// 访问A中的字段
fmt.Println(b.FieldA)
// 调用A中的方法
b.MethodA()
}
在上述代码中,结构体B嵌入了结构体A。在main
函数中,创建了B的实例b
,通过b.FieldA
访问了A中的字段,通过b.MethodA()
调用了A中的方法。