【发布时间】:2017-02-27 23:08:03
【问题描述】:
调用函数
当我定义一个结构 Lock 和一个函数 Test 时,结构 Lock 作为函数接收者
type Lock struct {
}
func (self Lock) Test() {
fmt.Println("Test Func")
}
我发现我可以用Lock结构指针调用这个函数
lock := &Lock{}
lock.Test()
同样,如果我定义一个struct Lock和一个函数Test作为Lock的指针作为接收者,我可以通过Lockstruct实例调用这个函数。
所以无论接收者是结构本身还是结构指针,我都可以通过两者来调用这个函数吗?什么原因。按照我的理解,结构体和结构体指针是完全不同的两种类型!
界面
如果像这样定义一个接口Locker
type Locker interface {
Test()
}
并定义一个结构Lock和一个函数Test,结构instance作为接收者,我不能将结构指针变量分配给Locker接口变量。
相反,如果定义一个结构体Lock和一个函数Test以结构体指针为接收者,将结构体实例变量分配给Locker接口var可以工作!
我对语言设计感到很困惑。谁能给我一些建议?
【问题讨论】:
-
你在selectors上寻找规则
-
看一下语言规范,尤其是方法集部分。当然还有:再次体验围棋之旅。
标签: go