ホームページ >バックエンド開発 >Golang >Go の反復中に構造体の値が更新されないのはなぜですか?

Go の反復中に構造体の値が更新されないのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-12-09 13:14:15793ブラウズ

Why are Struct Values Not Updated During Iteration in Go?

反復中に構造体の値を効果的に更新する方法

このコード スニペットには、Mod 構造体の配列を含む構造体 FTR があります。ループ内の特定の基準に基づいて Mod 要素の Type フィールドを更新することを目的としています。ただし、ループ内で行われた変更は、ループの完了後に FTR 構造体に反映されないようです。

問題

問題の核心は次のとおりです。つまり、 range キーワードを使用してスライスまたは配列を反復処理すると、要素のコピーのみが取得され、元の要素への参照は取得されません。これは、ループ内で要素に加えた変更はコピーにのみ影響し、元の要素は変更されないことを意味します。

解決策: インデックスを使用して反復する

正しくするには構造体の要素を更新するには、そのインデックスを反復処理し、コピーではなく元の要素を変更する必要があります。修正されたコードは次のとおりです。

type FTR struct {
    Id       string     
    Mod      []Mod  
}

for index := range ftr.Mod{
    switch ftr.Mod[index].Type {
    case “aaa”, “bbbb”:
        ftr.Mod[index].Type = "cccc”
    case "htr”:
        ftr.Mod[index].Type = "com"
    case "no":
        ftr.Mod[index].Type = "jnodejs"
    case "jdb”:
        ftr.Mod[index].Type = "tomcat"
    }

}

この更新されたコードでは、Mod 配列のインデックスを反復処理し、元の FTR 構造体の Type フィールドを直接変更します。そうすることで、ループ内で行われた変更がループの完了時に確実に保持されます。

以上がGo の反復中に構造体の値が更新されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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