值方法的用途
func?(person?Person)?Grow()?{ ????person.Age++ }
p?:=?Person{"Robert",?"Male",?33,?"Beijing"} p.Grow() fmt.Printf("%v\n",?p)
如果執(zhí)行p.Grow()不能達到預期目的的話,要這個·值方法·功能有何用處呢?至少在這個例子里是沒用的啊
func?(person?Person)?Grow()?{ ????person.Age++ }
p?:=?Person{"Robert",?"Male",?33,?"Beijing"} p.Grow() fmt.Printf("%v\n",?p)
如果執(zhí)行p.Grow()不能達到預期目的的話,要這個·值方法·功能有何用處呢?至少在這個例子里是沒用的啊
2019-06-26
舉報
2019-07-10
這個打印結果直覺上是34,但其實是33,為什么?
對于值類型方法來說,接受的標識符是值的一個拷貝的副本,不是值本身。執(zhí)行Grow方法的person.Age++語句,會使副本的Age值變?yōu)?4,但是打印的p的Age還是33(因為他們兩個并不是一個實例,另一個只是個副本)。
當我們把Grow方法變成指針方法后,打印的值就變成34了,因為此時傳遞的值是指針的副本,指針的副本任然指向p的值。所以累加操作會作用到person.Age上。
https://blog.csdn.net/weixin_33807284/article/details/92073495