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

回到顶部