慕工程3002471
2019-06-26 13:18
func (person Person) Grow() { person.Age++ }
p := Person{"Robert", "Male", 33, "Beijing"} p.Grow() fmt.Printf("%v\n", p)
如果执行p.Grow()不能达到预期目的的话,要这个·值方法·功能有何用处呢?至少在这个例子里是没用的啊
这个打印结果直觉上是34,但其实是33,为什么?
对于值类型方法来说,接受的标识符是值的一个拷贝的副本,不是值本身。执行Grow方法的person.Age++语句,会使副本的Age值变为34,但是打印的p的Age还是33(因为他们两个并不是一个实例,另一个只是个副本)。
当我们把Grow方法变成指针方法后,打印的值就变成34了,因为此时传递的值是指针的副本,指针的副本任然指向p的值。所以累加操作会作用到person.Age上。
https://blog.csdn.net/weixin_33807284/article/details/92073495
Go语言第一课
107794 学习 · 148 问题
相似问题