首頁  >  文章  >  後端開發  >  Go 變數是否因切片誤解而被覆蓋?

Go 變數是否因切片誤解而被覆蓋?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-24 08:09:02736瀏覽

Are Go Variables Being Overwritten Due to Slice Misunderstanding?

Go 變數被覆蓋(Bug?)

在這種情況下,問題在於理解切片在 Go 中的功能。切片由指向數組的指標及其長度和容量組成。將元素附加到切片時,它首先檢查擴展切片是否會超出其底層數組的容量。如果是,則分配一個更大的數組,將現有元素複製到其中,並更新容量。然後,新元素被加入到陣列的末尾,並且長度被更新。

在您的程式碼中,您有以下幾行:

<code class="go">pathA := append(route, nextA)
pathB := append(route, nextB)</code>

這裡有兩種可能性:

  1. 如果len(route) 等於cap (route),將分配一個新的後備數組,並且pathA 和pathB 將具有不同的值。
  2. 如果 len(route) 是小於 cap(route),pathA 和 pathB 最終將共用相同的後備陣列。數組中的最後一個元素將是 nextB,因為它是第二個執行的。

看起來第一種情況對於初始循環迭代來說是正確的,之後第二種情況發生。可以透過使用 copy() 和 make() 手動為這些路徑之一製作副本來解決此問題。

以上是Go 變數是否因切片誤解而被覆蓋?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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