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

自己体会一下。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值