FTR 構造体の更新の問題
Go で構造体とスライスを操作する場合、参照とコピーの概念を理解することが重要です。
提供されたコードを考えてみましょう。ここでは、ユーザーがループを使用して ftr 構造体内の値を更新しようとしています。デバッグの結果、switch ケースが実行され、ループ内の要素に変更が加えられる一方で、これらの変更はループの外には保持されないことがわかります。
この問題は、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" } }
この修正バージョンでは、要素へのポインターを反復する代わりに、スライス内のインデックスを反復し、スライス内の要素の値を直接変更します。これにより、ループ内で行われた変更が元の ftr 構造体に確実に反映されます。
以上がGo でスライスを使用すると、構造体の更新が保持されないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。