反復中に構造体の値を効果的に更新する方法
このコード スニペットには、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 サイトの他の関連記事を参照してください。