ホームページ > バックエンド開発 > Golang > Go マップ内の構造体フィールドを正しく変更するにはどうすればよいですか?

Go マップ内の構造体フィールドを正しく変更するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-12-25 01:07:14
オリジナル
998 人が閲覧しました

How Can I Correctly Modify Struct Fields Within a Go Map?

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 サイトの他の関連記事を参照してください。

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