前几天刚开始学习 Go。今天,我们在调试一段代码时,发现了一些似乎违反 Go 直觉的事情。
首先,我们定义了一个接口和一个实现它的数据结构。
type Executer interface {
Execute()
}
type whatever struct {
name string
}
func (this *whatever) Execute() {
log.Println(this.name)
}
现在考虑我有一个 nil 指针whatever,我尝试调用该方法Execute。在我迄今为止使用的其他面向对象语言中,这将在调用方法(即w.Execute())时调用空指针错误,因为对象指针为空。Execute有趣的是,在 Go 中,该方法被调用,当我尝试取消引用时,该方法出现空指针错误this.name。为什么不在调用方法的时候呢?
func main() {
var w *whatever
w.Execute()
}
那么,我现在想要了解的是这怎么可能?这是否意味着 Go 仅在编译时进行早期方法绑定,而在运行时没有方法与特定对象的绑定?
汪汪一只猫
相关分类