我只是在玩围棋,对于何时通过值或引用传递结构还没有一个很好的心理模型。
这可能是一个非常愚蠢的问题,但我只是想试验一下,看看我是否仍然在同一个对象上工作,或者我已经制作了一个副本(通过值传递)。
是否有办法打印对象的指针(或内部 id,如果指针值被 gc 更改) ?
package main
import ( "runtime" )
type Something struct {
number int
queue chan int
}
func gotest( s *Something, done chan bool ) {
println( "from gotest:")
println( &s )
for num := range s.queue {
println( num )
s.number = num
}
done <- true
}
func main() {
runtime.GOMAXPROCS(4)
s := new(Something)
println(&s)
s.queue = make(chan int)
done := make(chan bool)
go gotest(s, done)
s.queue <- 42
close(s.queue)
<- done
println(&s)
println(s.number)
}
给我的窗口(8g 编译版本) :
0x4930d4
from gotest:
0x4974d8
42
0x4930d4
42
为什么 go 例程中的指针值显示不同的值?原始物体上的数量确实被改变了,所以它是用同一个物体工作的。有没有一种方法可以查看持久化的对象 id?