Mengapakah Saya Tidak Boleh Menetapkan kepada Medan Struktur dalam Peta Go?

DDD
Lepaskan: 2024-11-27 13:13:13
asal
240 orang telah melayarinya

Why Can't I Assign to a Struct Field in a Go Map?

"Tidak Dapat Ditugaskan untuk Berpasangan dalam Peta": Kebolehalamatan Dijelaskan

Dalam Go, apabila cuba mengubah suai medan struktur yang disimpan dalam peta, ralat "tidak boleh diberikan kepadanya" mungkin timbul. Isu ini berpunca daripada konsep kebolehalamatan, yang mengehadkan penetapan langsung kepada nilai dalam peta.

Struktur pasangan memegang dua nilai float64 dalam peta, seperti kamus["xxoo"].b. Menetapkan nilai baharu kepada kamus["xxoo"].b gagal kerana nilai peta tidak boleh ditangani.

Peta Go direka untuk menyimpan dan mendapatkan data dengan cekap. Untuk mengekalkan kecekapan ini, nilai peta tidak boleh ditangani, yang bermaksud pengurusan memori membolehkannya dialihkan mengikut keperluan. Tanpa kebolehalamatan, operator pemilih (.) tidak boleh digunakan untuk mengakses medan struct untuk penetapan langsung.

Untuk mengelakkan pengehadan ini, gunakan jenis penuding sebagai nilai peta. Sebagai contoh, dengan mentakrifkan peta[rentetan]*pasangan, arahan penunjuk menjadikan struct boleh dialamatkan. Ini membenarkan penugasan langsung, seperti yang dilihat dalam kod berikut:

dict := make(map[string]*pair)
dict["xxoo"] = &pair{5.0, 2.0}
dict["xxoo"].b = 5.0
Salin selepas log masuk

Sebagai alternatif, jika menggunakan peta dengan jenis nilai, tetapkan salinan nilai sedia ada atau berikan nilai baharu sepenuhnya:

p := dict["xxoo"]
p.b = 5.0
dict["xxoo"] = p

// or
dict["xxoo"] = pair{5.0, 5.0}
Salin selepas log masuk

Dengan memahami kebolehalamatan dan melaksanakan penyelesaian yang sesuai, anda boleh memanipulasi struct yang disimpan dalam peta Go dengan berkesan.

Atas ialah kandungan terperinci Mengapakah Saya Tidak Boleh Menetapkan kepada Medan Struktur dalam Peta 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan