问答详情
源自:6-4 Go语言-指针

值方法的用途

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

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


提问者:慕工程3002471 2019-06-26 13:18

个回答

  • 猛猛小蚂蚁
    2019-07-10 14:24:33

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

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

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


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