Golang接口实现和方法参数 值拷贝

package main


type I interface {
	tt()
	pp()
}

func (a *A) tt() {
	println(&(a.b))
}

func (a A) pp() {
	println(&(a.b))
}

type A struct {
	b *B
}

type B struct {
	bb string
}

func test(a I) {
	a.tt()
}
func test1(a *I) {
	aa := *a
	aa.tt()
}

func NewI() I {
	return &A{
		b: &B{bb: "bb"},
	}
}

type C struct {
	i I
}

func main() {
	a := NewI()

	switch v := a.(type) {
	case *A:
		println(&(v.b))
		v.pp()
	}
	c := &C{i: a}
	test(a)
	test1(&a)
	c.i.tt()
}

输出:
0xc00000e010
0xc000032760
0xc00000e010
0xc00000e010
0xc00000e010

自己体会一下。

你可能感兴趣的