type A struct {
i int
}
func (a *A) Set(i int) {
a.i = i
}
func TestInherit(t *testing.T) {
var a = A{3}
a.Set(4)
t.Log(a.i) // 输出 4
}
这里可以通过非指针的 a 调用 Set 函数,并且 Set 的值是有效地。
第一个疑问:go 在调用方法时,会先将接收器的值复制一份,然后在这个副本上执行方法。我的理解是 a 复制了一份,在新的 a 上面修改不应该影响原来的 a 。
type Set interface {
Set(int)
}
type A struct {
i int
}
func (a *A) Set(i int) {
a.i = i
}
func TestInherit(t *testing.T) {
var _ Set = A{} // 这里编译不通过,提示没有实现 Set 方法。
}
第二个疑问,为啥上面的例子能调用 a.Set(),为啥这里又报错说没有实现 Set 方法。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.