Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengubah Suai Medan Struktur dalam Peta dalam Go?

Bagaimana untuk Mengubah Suai Medan Struktur dalam Peta dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-06 20:23:13
asal
389 orang telah melayarinya

How to Modify Struct Fields in Maps in Go?

Menetapkan kepada Medan Struktur dalam Peta

Apabila bekerja dengan peta dalam Go, adalah penting untuk memahami implikasi penugasan kepada medan struct dalam bidang tersebut. peta. Ralat "tidak boleh menetapkan kepada medan struct dalam peta" timbul apabila percubaan dibuat untuk mengubah suai secara langsung medan struct nilai yang disimpan dalam peta. Ralat ini berlaku disebabkan oleh cara peta dilaksanakan dalam Go.

Dalam Go, peta ialah himpunan pasangan yang jenis kuncinya adalah setanding dan jenis elemen boleh terdiri daripada sebarang jenis, termasuk struct. Walau bagaimanapun, apabila nilai struct diletakkan ke dalam peta sebagai elemen, ia tidak mengekalkan kebolehalamatannya. Ini bermakna percubaan untuk mengubah suai medannya seolah-olah ia adalah penunjuk akan mencetuskan ralat yang disebutkan di atas.

Pertimbangkan kod berikut:

type Snapshot struct {
  Key   string
  Users []Users
}

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

// Initialization
snapshots["test"] = Snapshot {
  Key: "testVal",
  Users: make([]Users, 0),
}
Salin selepas log masuk

Sekarang, percubaan untuk menambah pengguna baharu pada Pengguna memotong dalam nilai Syot Kilat yang disimpan dalam peta mengakibatkan ralat yang digeruni:

snapshots["test"].Users = append(snapshots["test"].Users, user)
Salin selepas log masuk

Untuk mengatasi ini cabaran, terdapat dua penyelesaian yang berdaya maju:

Kaedah 1:

Sebelum pengubahsuaian, cipta salinan setempat bagi nilai struct yang disimpan dalam peta dan kemudian tetapkan semula entri peta dengan salinan yang diubah suai:

tmp := snapshots["test"]
tmp.Users = append(tmp.Users, user)
snapshots["test"] = tmp
Salin selepas log masuk

Kaedah 2:

Sebagai alternatif, tentukan peta dengan jenis penuding, yang membenarkan pengubahsuaian pada medan struct:

snapshots := make(map[string] *Snapshot, 1)

// Initialization
snapshots["test"] = &Snapshot {
  Key: "testVal",
  Users: make([]Users, 0),
}
Salin selepas log masuk

snapshot["test"].Pengguna = append( syot kilat["ujian"].Pengguna, pengguna) kini sah dan tidak akan menghadapi ralat. Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa penyelesaian kedua mungkin mempunyai implikasi untuk pengurusan ingatan dan harus digunakan dengan berhati-hati.

Atas ialah kandungan terperinci Bagaimana untuk Mengubah Suai Medan Struktur dalam Peta dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan