在「掌握併發在去」書中有一段話讓我覺得我可能會錯過關於「延遲」功能的東西。通過引用傳遞數據「推遲」
您還應該注意,通過引用傳遞的任何數據可能處於意外狀態。
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