Bagaimanakah pengubahsuaian pada tatasusunan yang dihantar kepada fungsi berfungsi dalam Go?

Patricia Arquette
Lepaskan: 2024-10-31 04:57:01
asal
137 orang telah melayarinya

How do modifications to arrays passed to functions work in Go?

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>
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!