Melampirkan Terus pada Slice dalam Peta Go
Dalam Go, anda mungkin menghadapi senario di mana anda bertujuan untuk mengekalkan peta yang mengaitkan rune dengan kepingan dan tambahkan elemen pada kepingan yang sepadan. Walau bagaimanapun, penambahan terus pada kepingan yang dikembalikan dengan mengakses peta (cth., mappedAminoAcid = append(mappedAminoAcid, kodon)) tidak berfungsi seperti yang diharapkan. Sebaliknya, anda perlu menggunakan bentuk capaian kata kerja (aminoAcidsToCodons[aminoAcid] = append(mappedAminoAcid, codon)).
Tingkah laku ini berpunca daripada cara Go mengendalikan kepingan. Apabila anda menambah pada kepingan menggunakan fungsi tambah, ia mengembalikan kepingan baharu jika tatasusunan asas perlu berkembang untuk menampung elemen baharu. Oleh itu, untuk mengemas kini kepingan yang disimpan dalam peta, anda perlu menetapkan semula kepingan baharu pada peta, sama seperti yang anda lakukan dengan rentetan.
Contohnya:
<code class="go">var x map[string]string x["a"] = "foo" y := x["a"] y = "bar" // x["a"] is still "foo"</code>
Untuk memudahkan kod anda, anda boleh memanfaatkan fakta bahawa kepingan nil ialah hujah pertama yang sah untuk tambahan:
<code class="go">aminoAcidsToCodons := map[rune][]string{} for codon, aminoAcid := range utils.CodonsToAminoAcid { aminoAcidsToCodons[aminoAcid] = append(aminoAcidsToCodons[aminoAcid], codon) }</code>
Dengan memahami cara kepingan berfungsi dalam Go, anda boleh mengendalikan senario yang melibatkan penambahan kepingan dalam peta dengan berkesan.
Atas ialah kandungan terperinci Mengapa Penambahan Langsung pada Slice dalam Go Map Tidak Berfungsi Seperti Yang Dijangkakan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!