Memahami Pembolehubah Julat dalam Go
S: Mengapa saya tidak dapat mengubah suai nilai dalam julat struktur jenis?
Dalam Go, konsep kepingan dan julat boleh mengelirukan bagi pendatang baharu. Pernyataan julat berulang melalui elemen dalam koleksi, memberikannya kepada pembolehubah lelaran. Walau bagaimanapun, dalam kes struktur, mengubah suai pembolehubah ini tidak mengubah suai nilai asal.
J: Menetapkan Pembolehubah Lelaran
Spesifikasi Bahasa Pengaturcaraan Go menyatakan bahawa untuk penyataan dengan klausa julat, pembolehubah lelaran diberikan nilai setiap elemen dalam koleksi. Walau bagaimanapun, pembolehubah ini hanya setempat kepada badan gelung.
Mengubah Suai Pembolehubah Lelaran
Apabila anda mengubah suai pembolehubah lelaran dalam gelung, anda sebenarnya tidak mengubah suai asal nilai dalam koleksi. Sebaliknya, anda sedang mencipta salinan baharu bagi nilai dan memberikannya kepada pembolehubah lelaran.
Penyelesaian: Menetapkan Nilai Terubah
Untuk mengubah suai nilai asal dalam koleksi , anda perlu menetapkan pembolehubah lelaran yang diubah suai kembali ke koleksi asal. Dalam kod contoh, pembolehubah lelaran yang diubah suai untuk elem.Count perlu diberikan kembali kepada chartRecords[i].
Kod Kemas Kini
Berikut ialah kod yang dikemas kini dengan pengubahsuaian yang diperlukan:
for i, elem := range chartRecords { elem.Count = modMe(mod, i) chartRecords[i] = elem fmt.Printf("No: %2d | Count: %2d | Name = %s\r\n", i, elem.Count, elem.Name) }
Pengubahsuaian ini memastikan nilai elem.Count yang diubah suai ditetapkan kembali dengan betul ke bahagian cartaRekod.
Atas ialah kandungan terperinci Mengapakah saya tidak boleh mengubah suai nilai struktur secara langsung dalam gelung go range?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!