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中文網其他相關文章!