Go で構造体のマップ内のフィールドを直接変更する
Go では、int から struct へのマップを使用して、構造体の値にアクセスできます。キーを使用して。ただし、構造体の値のフィールドを直接変更すると、予期しない動作が発生する可能性があります。
間接的な理由
マップから構造体の値にアクセスすると、実際には構造体のコピーにアクセスします。このコピーを変更しても、マップ内の元の構造体は変更されません。元の構造体を変更するには、それを読み取って変更し、マップに書き戻す必要があります。
これは、マップに割り当てられるときに Go が構造体の値を別のメモリの場所に保存するためです。 。コピーを変更しても、元の値には影響しません。
暗黙の隠れコスト
スライスやマップなどの他のデータ構造の構造体のフィールドを変更する場合、暗黙の隠れコストはありません。 。この動作は、int から構造体へのマップの場合と同じで、構造体のコピーへの変更は元の構造には影響しません。
ポインターの使用
ポインターを使用して、元の構造体の値をその場で変更できます。構造体自体ではなく、構造体へのポインターをマップに保存することで、元の構造体のフィールドに直接アクセスして変更できます。
例:
import "fmt" type dummy struct { a int } func main() { x := make(map[int]*dummy) x[1] = &dummy{a: 1} x[1].a = 2 fmt.Println(x[1].a) // Output: 2 }
この例では、ポインターを使用して構造体の値にアクセスし、フィールドを直接変更できるようにします。
以上がGo マップ内の構造体フィールドを正しく変更するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。