ホームページ > バックエンド開発 > Golang > `&stu` を使用するときに Go スライス範囲ループがマップ キーに同じアドレスを割り当てるのはなぜですか?

`&stu` を使用するときに Go スライス範囲ループがマップ キーに同じアドレスを割り当てるのはなぜですか?

Susan Sarandon
リリース: 2024-12-06 04:14:10
オリジナル
547 人が閲覧しました

Why Do Go Slice Range Loops Assign the Same Address to Map Keys When Using `&stu`?

Go Slice Range 現象の詳細

提供されたコード スニペットでは、range キーワードを使用して Student struct のスライスが反復処理されます。ただし、生徒の住所をマップに割り当てると、一見複雑な問題が明らかになります。結果として得られるマップ キーは同じ住所を持つということです。

この現象を理解するには、Go では range キーワードが反復されることを認識することが重要です。アドレスではなく、スライスの要素です。これは、範囲ループ内の変数 stu がスライス要素のコピーであることを意味します。したがって、stu のアドレスが取得されてマップ キーに割り当てられると、スライス要素ではなくコピーのアドレスが保存されます。

これを修正するには、明示的に取得するようにコードを変更する必要があります。スライス要素のアドレス。これは、スライス インデックス変数 i:

for i := range s {
    m[s[i].Name] = &s[i]
}
ログイン後にコピー

を使用することで実現できます。この変更により、マップ キーが実際のスライス要素のアドレスを保持するようになります。

反復処理の違いを理解することで、要素をスライスしてそのアドレスを取得すると、開発者は潜在的な混乱を回避し、Go でスライスを操作するときにコードの意図した動作を保証できます。

以上が`&stu` を使用するときに Go スライス範囲ループがマップ キーに同じアドレスを割り当てるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート