ホームページ >バックエンド開発 >Golang >Go で範囲反復中に元の値を変更するにはどうすればよいですか?

Go で範囲反復中に元の値を変更するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-30 12:34:14575ブラウズ

How to Modify Original Values During Range Iterations in Go?

範囲反復での値のアドレス指定

値の範囲を反復する場合、単にコピーを操作するのではなく、元の値を変更したいと思うのが一般的です。ただし、デフォルトでは、範囲構造は各値のコピーを返します。

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

上記のコードでは、範囲が値をコピーするため、配列内の各要素の「field」フィールドは変更されません。 e 変数。

解決策

元の値を変更するには、範囲構造を使用して値を反復処理することはできません。代わりに、配列インデックスを使用する必要があります。

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 で範囲反復中に元の値を変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。