首頁 >後端開發 >Golang >在 Go 中如何修改傳遞給函數的陣列?

在 Go 中如何修改傳遞給函數的陣列?

Patricia Arquette
Patricia Arquette原創
2024-10-31 04:57:01251瀏覽

How do modifications to arrays passed to functions work in Go?

修改傳遞給 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中文網其他相關文章!

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