首頁 > 後端開發 > Golang > 為什麼使用 Go 的 range 關鍵字修改值失敗,陣列索引如何提供解?

為什麼使用 Go 的 range 關鍵字修改值失敗,陣列索引如何提供解?

Susan Sarandon
發布: 2024-12-27 18:27:15
原創
106 人瀏覽過

Why Does Modifying Values Using Go's `range` Keyword Fail, and How Can Array Indices Provide a Solution?

數組索引在範圍值上的用法

在Go 中將range 關鍵字與數組或切片一起使用時,必須了解它傳回鍵和值的副本,而不是原始值引用。在迭代期間嘗試修改集合中的值時,此行為可能會導致混亂。

在提供的範例中:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for _, e := range array {
        e.field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
登入後複製

範圍迭代應將字串「foo」指派給陣列中每個元素的欄位。但是,當第二個循環列印更新的值時,所有欄位仍為空。這是由於 range 的基於複製的語義造成的。

為了在迭代過程中有效修改數組中的值,需要使用數組索引而不是range 變數:

package main

import "fmt"

type MyType struct {
    field string
}

func main() {
    var array [10]MyType

    for idx, _ := range array {
        array[idx].field = "foo"
    }

    for _, e := range array {
        fmt.Println(e.field)
        fmt.Println("--")
    }
}
登入後複製

此修改確保索引變數引用數組中的實際元素,從而允許在第二個循環中進行正確的欄位更新和正確的輸出。

以上是為什麼使用 Go 的 range 關鍵字修改值失敗,陣列索引如何提供解?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板