Melalukan Tatasusunan kepada Fungsi dan Mengubah Suainya dalam Golang
Dalam bahasa pengaturcaraan seperti C , tatasusunan secara tersirat diluluskan melalui rujukan apabila dihantar ke fungsi. Walau bagaimanapun, di Golang, tingkah laku ini berbeza, yang boleh mengelirukan bagi mereka yang datang dari bahasa lain.
Perbezaan: Tatasusunan vs. Kepingan
Dalam kod yang disediakan contoh:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) reverse(tab) fmt.Println(tab) } func reverse(tab []int) { for i, j := 0, len(tab)-1; i < j; i, j = i+1, j-1 { tab[i], tab[j] = tab[j], tab[i] } }</code>
Nampaknya tatasusunan diluluskan oleh nilai (bukan rujukan), tetapi fungsi terbalik masih mengubah suai tatasusunan asal. Kuncinya di sini ialah dalam Golang, "tab" bukan tatasusunan tetapi slice.
Slices in Go
Slices ialah data ringan struktur yang mewakili bahagian bersebelahan tatasusunan. Ia terdiri daripada penunjuk kepada tatasusunan asas, panjang dan kapasiti. Apabila hirisan dihantar ke fungsi, hanya maklumat pengepala (penunjuk, panjang, kapasiti) disalin, bukan keseluruhan tatasusunan asas.
Melalui Slices melalui Rujukan
Oleh itu, sebarang perubahan yang dibuat pada hirisan dalam fungsi mempengaruhi tatasusunan asas, kerana ia menunjuk kepada data yang sama. Dalam contoh di atas, fungsi terbalik mengubah suai elemen kepingan, yang seterusnya mempengaruhi tab tatasusunan asal.
Kesimpulan
Semasa tatasusunan dalam Go diluluskan oleh nilai (salinan), kepingan diluluskan melalui rujukan (kongsi data asas). Memahami perbezaan ini adalah penting apabila menghantar tatasusunan atau kepingan kepada fungsi di Golang untuk mengelakkan tingkah laku yang tidak dijangka.
Atas ialah kandungan terperinci Bagaimanakah kepingan dalam Golang mengubah suai tatasusunan asal walaupun ia dihantar ke fungsi mengikut nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!