【发布时间】:2016-11-23 09:28:17
【问题描述】:
我还在学习围棋,需要帮助我清醒一下。
在每个Println 中,以下程序输出Power 值为1。我期待1 作为第一个输出,2 作为第二个输出。
我的假设是 Change func 用 new address 覆盖 address of s 并且此更改将反映给调用者 (main func)。在这种情况下,当调用第二个Println 时,原始地址将指向新创建的地址。
我的假设是错误的,但我不知道为什么。
package main
import (
"fmt"
)
type Pod struct{
Power int
}
func main() {
pod := &Pod{1}
fmt.Println(pod.Power)
Change(pod)
fmt.Println(pod.Power)
}
func Change(s *Pod) {
s = &Pod{2}
}
为了进一步了解幕后发生的事情,我这次确实尝试打印地址,如下所示;
import (
"fmt"
)
type Pod struct{
Power int
}
func main() {
pod := &Pod{ 1}
fmt.Println(&pod) //0xc04202c020
Change(pod)
fmt.Println(&pod) //0xc04202c020
}
func Change(s *Pod) {
fmt.Println(&s) //0xc04202c030 ( I was expecting 0xc04202c020 here)
s = &Pod{ 2}
fmt.Println(&s) //0xc04202c030
}
【问题讨论】:
标签: go