1. ホーム
  2. pointers

[解決済み] 値の代わりに参照する範囲

2022-09-17 19:09:52

質問

rangeはキーと値のコピー("copy")を返すと見ました。そのレンジがアイテムのアドレスを返す方法はありますか?例

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("--")
    }
}

http://play.golang.org/p/AFOGG9NGpx

ここで、"field" は、範囲がフィールドのコピーを送信するため、変更されません。 indexを使用しなければならないのでしょうか、それとも他に値を変更する方法があるのでしょうか?

どのように解決するのですか?

簡単で直接的な答えです。 いいえ、値ではなく、配列のインデックスを使用します。

というわけで、上のコードはこうなります。

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("--")
    }
}