Go でのマップ値の操作を理解する
Go では、マップ内に構造体などのデータ構造を格納することが望ましいことがよくあります。ただし、マップ内でこれらの構造体の値のフィールドを直接変更しようとすると、問題が発生するユーザーもいます。この質問では、この制限の背後にある理由を検討します。
マップ値フィールドを直接変更できないのはなぜですか?
値によって構造体をマップに保存するとき、この構造体は、参照ではなく値の コピー を取得します。結果として、このコピーに加えられた変更は、マップ内の元の構造体には影響しません。元の構造体を変更するには、まずコピーを取得し、変更を加えてから、変更したコピーをマップに書き戻す必要があります。
直接変更の代替手段
マップ値に対してフィールドを直接変更することはできませんが、代わりにポインターを構造体に保存するという代替アプローチがあります。ポインターを使用すると、基になる構造体をマップに読み取ったり、マップに書き戻したりすることなく、直接変更できます。
次の例を考えてみましょう。
type dummy struct { a int } x := make(map[int]*dummy) x[1] = &dummy{a: 1} x[1].a = 2
このシナリオでは、マップにはダミー構造体へのポインタ。 x[1].a にアクセスすると、ポインタによって参照される元の構造体を直接変更することになります。これにより、構造体のコピーの読み書きを必要とせずに、シームレスなフィールド変更が可能になります。
以上がGo Maps で構造体フィールドを直接変更できない理由とその代替手段は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。