Golang: Membongkar Misteri Lewat Tatasusunan
Dalam artikel ini, kami menyelidiki enigma yang mengelilingi tatasusunan yang berlalu di Golang. Tidak seperti beberapa bahasa lain yang tatasusunan diluluskan secara tersirat melalui rujukan, pendekatan Golang adalah tersendiri.
Meneroka Kekeliruan
Alan A.A. Donovan dan Brian W. Kernighan dalam "The Go Programming Language" mencadangkan bahawa tatasusunan dalam Go tidak diluluskan secara tersirat melalui rujukan. Walau bagaimanapun, pemeriksaan rapi kod berikut mungkin menimbulkan persoalan:
<code class="go">func main() { tab := []int{1, 2, 3} fmt.Println(tab) // Results in [1 2 3] reverse(tab) fmt.Println(tab) // Results in [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>
Walaupun tidak melepasi tatasusunan melalui rujukan, fungsi terbalik mengubah tatasusunan asal. Tingkah laku ini kelihatan serupa dengan C .
Kebenaran Didedahkan
Kuncinya terletak pada mengenali bahawa tab pembolehubah (dalam utama) dan tab parameter (sebaliknya) adalah bukan tatasusunan tetapi hirisan tatasusunan asas. Tidak seperti tatasusunan, hirisan hanyalah pengepala yang menerangkan sebahagian daripada tatasusunan. Apabila hirisan diedarkan, hanya pengepala ini disalin, menunjuk kepada tatasusunan sandaran yang sama.
Perbezaan Penting
Dalam Go, panjang tatasusunan adalah wujud pada jenisnya ( cth., [3]int), menunjukkan bahawa tatasusunan sebenar diluluskan oleh nilai. Kepingan, bagaimanapun, sebagai pemerihal semata-mata, diluluskan oleh nilai, tetapi pengubahsuaian pada elemennya mempengaruhi tatasusunan asas kerana ia adalah sama untuk semua keping.
Cerapan Tambahan
Untuk pemahaman yang lebih mendalam, rujuk sumber berikut:
Kesimpulan
Pendekatan Go untuk menghantar tatasusunan ialah berbeza daripada beberapa bahasa lain. Memahami perbezaan antara tatasusunan dan kepingan adalah penting untuk memahami tingkah laku ini. Kepingan, berfungsi sebagai pengepala fleksibel, membenarkan untuk mengubah suai tatasusunan asas melalui salinan kepingan yang berbeza.
Atas ialah kandungan terperinci Pergi: Adakah Tatasusunan Lulus mengikut Rujukan atau Nilai?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!