ホームページ > バックエンド開発 > Golang > マップ内の構造体フィールドに代入できないのはなぜですか?

マップ内の構造体フィールドに代入できないのはなぜですか?

Patricia Arquette
リリース: 2024-11-12 22:36:02
オリジナル
429 人が閲覧しました

Why Can't I Assign to a Struct Field in a Map?

エラー: マップの構造体フィールドに代入できません

構造体を格納するマップを操作する場合、開発者はよく「構造体に代入できません」というエラーに遭遇します。地図上のフィールド。」この問題は、マップに格納されている構造体のサブフィールドを変更しようとすると発生します。

提供された例は、このシナリオを示しています。マップ スナップショットは、値が Users 構造体のスライスを含む構造体スナップショットであるキーと値のペアで初期化されます。ただし、Users スライスに追加しようとすると、前述のエラーがスローされます。

この問題を解決するには、マップに格納されている元の構造体がアドレス指定できないことを理解することが重要です。代わりに、それはコピーです。したがって、変更はマップ内の元の構造体には反映されません。

正しいアプローチは、マップから構造体を取得し、必要な変更を加えてから、それをマップに再割り当てすることです。このアプローチを実装する修正されたコードは次のとおりです。

func main() {
  snapshots := make(map[string]Snapshot, 1)

  snapshots["test"] = Snapshot{
    Key: "testVal",
    Users: make([]Users, 0),
  }

  user := Users{...} // Initialize a new Users struct

  // Retrieve the Snapshot value from the map
  snapshot := snapshots["test"]

  // Append to the Users slice
  snapshot.Users = append(snapshot.Users, user)

  // Reassign the modified Snapshot value to the map
  snapshots["test"] = snapshot
}
ログイン後にコピー

このアプローチに従うと、マップ内の元のスナップショット構造体が、追加された Users スライスで正常に更新されます。

以上がマップ内の構造体フィールドに代入できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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