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), }
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)
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
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), }
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!