为了账号安全,请及时绑定邮箱和手机立即绑定

值方法的用途

func (person Person) Grow() {
    person.Age++
}
p := Person{"Robert", "Male", 33, "Beijing"}
p.Grow()
fmt.Printf("%v\n", p)

如果执行p.Grow()不能达到预期目的的话,要这个·值方法·功能有何用处呢?至少在这个例子里是没用的啊


正在回答

1 回答

这个打印结果直觉上是34,但其实是33,为什么?

对于值类型方法来说,接受的标识符是值的一个拷贝的副本,不是值本身。执行Grow方法的person.Age++语句,会使副本的Age值变为34,但是打印的p的Age还是33(因为他们两个并不是一个实例,另一个只是个副本)。

当我们把Grow方法变成指针方法后,打印的值就变成34了,因为此时传递的值是指针的副本,指针的副本任然指向p的值。所以累加操作会作用到person.Age上。


https://blog.csdn.net/weixin_33807284/article/details/92073495

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

值方法的用途

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信