在“掌握并发在去”书中有一段话让我觉得我可能会错过关于“延迟”功能的东西。通过引用传递数据“推迟”
您还应该注意,通过引用传递的任何数据可能处于意外状态。
func main() {
aValue := new(int)
defer fmt.Println(*aValue)
for i := 0; i < 100; i++ {
*aValue++
}
}
这将打印0,我想,因为,按照规范:
每一次“推迟”执行语句,函数值和参数的号召被照常评估,重新保存
也就是说,* aValue在调用defer时是0,这就是为什么在最后打印0.在这种情况下是否将指针传递给不同的函数是ir相关。
我的理解是正确的还是我错过了什么?
我不明白它在说什么。 Go书中的“通过引用传递”这个短语也很奇怪,因为Go中的所有值都是按值传递的。 – JimB
那么,这个例子就是传递一个指针。我认为这是他通过参考传递的意思。因为虽然指针被复制,但副本仍然指向相同的内存。 –
该示例没有在任何地方传递指针,它取消引用指针并传递int值(和“传递引用”具有与“传递指针值”不同的含义) – JimB