Rumah >pembangunan bahagian belakang >Golang >Adakah Go Slices dan Arrays Diperlakukan Sama Apabila Ditugaskan dan Diluluskan?

Adakah Go Slices dan Arrays Diperlakukan Sama Apabila Ditugaskan dan Diluluskan?

DDD
DDDasal
2024-10-26 01:23:27341semak imbas

 Are Go Slices and Arrays Treated the Same When Assigned and Passed?

Rawatan Slices vs. Array dalam Go

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

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.

Kepingan

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.

Contoh Kod

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.

Kesimpulan

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!

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