首頁 >後端開發 >Golang >為什麼設定一個 Go 變數會覆蓋另一個變數?

為什麼設定一個 Go 變數會覆蓋另一個變數?

DDD
DDD原創
2024-10-24 08:09:30954瀏覽

Why Does Setting One Go Variable Overwrite the Other?

Go 變數被覆蓋

在這段程式碼中,作者遇到了設定 pathB 時變數 pathA 被覆蓋的問題。這表示兩個變數都引用相同的底層數組,導致對一個變數的修改影響另一個變數。

問題源自於 Go 中對切片使用append() 函數。當向切片追加元素時,Go 檢查底層陣列是否有足夠的容量來容納新元素。如果沒有,它會分配一個更大的陣列並複製現有元素。

在提供的程式碼中,切片路由用於建立 pathA 和 pathB。如果附加到路徑 A 或路徑 B 時超出了基礎路由數組的容量,則會指派一個新數組。然而,由於pathA和pathB都源自於同一個切片,因此它們共享相同的底層數組。

為了避免這個問題,有必要在使用它初始化pathA和pathB之前建立一個獨立的路由副本。這可以使用make() 和copy() 函數來實現,如作者的第二次編輯所示:

<code class="go">newRoute := make([]int, len(prePaths[i]), (cap(prePaths[i])+1)*2)
copy(newRoute, prePaths[i])

pathA := append(newRoute, nextA)
pathB := append(prePaths[i], nextB)</code>

在此修訂後的程式碼中,newRoute 是一個具有自己的底層數組的單獨切片。這可確保路徑 A 和路徑 B 具有獨立的資料副本,防止對其中一個的修改影響另一個。

以上是為什麼設定一個 Go 變數會覆蓋另一個變數?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn