我正在学习 Go,并且遇到了在 Go 中将接口嵌入到结构中的情况。
我理解接口及其实现的乐趣,但我对当前执行将接口嵌入结构中的原因感到困惑。
当我在结构中嵌入一个接口时,该结构获得了接口的方法集,现在可以用作接口类型变量的值,例如:
type Foo interface {
SetBaz(baz)
GetBaz() baz
}
type Bar struct {
Foo
}
所以现在我们有一个 struct 类型Bar,它嵌入了Foo. 因为Barembeds Foo,Bar现在满足任何需要 type 的接收器或参数Foo,即使甚至Bar没有定义它们。
尝试调用Bar.GetBaz()会导致运行时错误:panic: runtime error: invalid memory address or nil pointer dereference。
为什么 Go 在嵌入接口的结构上定义 nil 方法,而不是明确要求通过编译器定义这些方法?
蓝山帝景
相关分类