Golang Go语言结构体方法的困惑
Golang Go语言结构体方法的困惑
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 方法。
更多关于Golang Go语言结构体方法的困惑的实战教程也可以访问 https://www.itying.com/category-94-b0.html