修改傳遞給 Go 中函數的陣列
與某些程式語言相反,Go 不會引用隱式傳遞陣列。當陣列傳遞給函數時,僅複製其值。因此,在函數內對傳入的陣列進行修改不會影響原始陣列。
但是,在 Go 中,陣列並沒有明確宣告。相反,我們使用切片,它是底層數組的動態、可調整大小的視圖。當切片傳遞給函數時,僅複製切片描述符,其中包括指向基礎數組的指標、其長度和容量。
因此,對切片元素所做的任何更改函數內的切片將反映在原始切片中,因為它們都引用相同的底層數組。
考慮以下程式碼範例:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // [1 2 3] reverse(tab) fmt.Println(tab) // [3 2 1] } func reverse(tab []int) { for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 { tab[i], tab[j] = tab[j], tab[i] } }</code>
在此範例中,反向函數接收切片標籤。在函數內對切片標籤進行的修改(例如交換元素)將影響原始切片,因為它們都引用相同的底層數組。
因此,在 Go 中將陣列傳遞給函數時,請記住僅複製切片描述符。由於對底層數組的引用,函數內對切片元素所做的任何修改都會反映在原始切片中。
以上是在 Go 中如何修改傳遞給函數的陣列?的詳細內容。更多資訊請關注PHP中文網其他相關文章!