Rumah >pembangunan bahagian belakang >Golang >Adakah Go Slices dan Arrays Diperlakukan Sama Apabila Ditugaskan dan Diluluskan?
Dalam Go, kepingan dan tatasusunan mempunyai gelagat yang berbeza walaupun terdapat persamaan. Pembezaan ini mempengaruhi cara ia dilayan apabila ditetapkan dan diluluskan sebagai hujah.
Array ialah koleksi elemen bersaiz tetap, dengan setiap elemen menduduki indeks tertentu. Menugaskan satu tatasusunan kepada yang lain menghasilkan salinan semua elemen, tanpa mengira saiznya. Ini bermakna bahawa sebarang pengubahsuaian yang dibuat pada tatasusunan yang ditetapkan tidak akan menjejaskan tatasusunan asal.
Sebaliknya, kepingan adalah rujukan yang fleksibel dan dinamik kepada tatasusunan asas. Apabila anda menetapkan kepingan kepada pembolehubah lain, anda sedang mencipta rujukan kepada tatasusunan asas yang sama, bukan salinan. Pengubahsuaian yang dibuat pada mana-mana hirisan akan menjejaskan tatasusunan asas dan, oleh itu, kedua-dua rujukan.
Pertimbangkan kod Go berikut:
<code class="go">import ( "fmt" "rand" "time" ) func shuffle(arr []int) { rand.Seed(time.Nanoseconds()) for i := len(arr) - 1; i > 0; i-- { j := rand.Intn(i) arr[i], arr[j] = arr[j], arr[i] } } func main() { arr := []int{1, 2, 3, 4, 5} arr2 := arr shuffle(arr) for _, i := range arr2 { fmt.Printf("%d ", i) } }</code>
Dalam contoh ini, niat nak shuffle hirisan arr2 sambil biarkan arr utuh. Walau bagaimanapun, disebabkan oleh cara hirisan berfungsi, kedua-dua arr dan arr2 merujuk tatasusunan asas yang sama. Akibatnya, apabila shuffle() bertukar-tukar elemen dalam arr, perubahan itu juga ditunjukkan dalam arr2.
Hasilnya ialah "1 5 2 4 3," yang menunjukkan kocok arr dan arr2 . Tingkah laku ini timbul daripada perbezaan antara kepingan (yang merupakan rujukan) dan tatasusunan (yang merupakan koleksi bersaiz tetap). Apabila bekerja dengan tatasusunan dalam Go, adalah penting untuk mengetahui perbezaan asas ini.
Atas ialah kandungan terperinci Adakah Go Slices dan Arrays Diperlakukan Sama Apabila Ditugaskan dan Diluluskan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!