Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah kepingan dalam Golang mengubah suai tatasusunan asal walaupun ia dihantar ke fungsi mengikut nilai?

Bagaimanakah kepingan dalam Golang mengubah suai tatasusunan asal walaupun ia dihantar ke fungsi mengikut nilai?

Linda Hamilton
Linda Hamiltonasal
2024-10-30 12:34:15503semak imbas

How do slices in Golang modify the original array even though they are passed to functions by value?

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!

Kenyataan:
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