Mengubah Suai Tatasusunan yang Dilalukan kepada Fungsi dalam Go
Bertentangan dengan sesetengah bahasa pengaturcaraan, Go tidak secara tersirat menghantar tatasusunan melalui rujukan. Apabila tatasusunan dihantar ke fungsi, hanya nilainya disalin. Oleh itu, pengubahsuaian yang dibuat pada tatasusunan yang diluluskan dalam fungsi tidak akan menjejaskan tatasusunan asal.
Walau bagaimanapun, dalam Go, tatasusunan tidak diisytiharkan secara eksplisit. Sebaliknya, kami bekerja dengan kepingan, yang merupakan paparan dinamik yang boleh diubah saiz tatasusunan asas. Apabila hirisan dihantar ke fungsi, hanya deskriptor hirisan disalin, yang termasuk penuding kepada tatasusunan asas, panjangnya dan kapasitinya.
Akibatnya, sebarang perubahan yang dibuat pada unsur-unsur slice dalam fungsi akan dicerminkan dalam kepingan asal, kerana kesemuanya merujuk kepada tatasusunan asas yang sama.
Pertimbangkan contoh kod berikut:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // [1 2 3] reverse(tab) fmt.Println(tab) // [3 2 1] } 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>
Dalam contoh ini, fungsi terbalik menerima tab hirisan. Pengubahsuaian yang dibuat pada tab hirisan dalam fungsi, seperti menukar elemen, akan menjejaskan kepingan asal kerana kedua-duanya merujuk kepada tatasusunan asas yang sama.
Oleh itu, apabila menghantar tatasusunan kepada fungsi dalam Go, ingat bahawa hanya deskriptor hirisan sahaja yang disalin. Sebarang pengubahsuaian yang dibuat pada elemen kepingan dalam fungsi akan ditunjukkan dalam kepingan asal kerana rujukannya kepada tatasusunan asas.
Atas ialah kandungan terperinci Bagaimanakah pengubahsuaian pada tatasusunan yang dihantar kepada fungsi berfungsi dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!