web-dev-qa-db-ja.com

代わりに値を参照する範囲

その範囲がキーと値の「コピー」を返すのを見ました。その範囲でアイテムのアドレスを返す方法はありますか?例

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

ここで、範囲はフィールドのコピーを送信するため、「フィールド」は変更されません。インデックスを使用する必要がありますか、または値を変更する他の方法はありますか?

読んでくれてありがとう。

64
Epitouille

短くて直接的な答え:いいえ、値の代わりに配列インデックスを使用します

したがって、上記のコードは次のようになります。

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