エラー: マップの構造体フィールドに代入できません
構造体を格納するマップを操作する場合、開発者はよく「構造体に代入できません」というエラーに遭遇します。地図上のフィールド。」この問題は、マップに格納されている構造体のサブフィールドを変更しようとすると発生します。
提供された例は、このシナリオを示しています。マップ スナップショットは、値が 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 サイトの他の関連記事を参照してください。