Mengapakah mengubah suai tatasusunan di dalam fungsi dalam Go juga mengubah pembolehubah yang diberikan kepada tatasusunan yang sama di luar fungsi?

Susan Sarandon
Lepaskan: 2024-10-26 01:25:28
asal
720 orang telah melayarinya

Why does modifying an array inside a function in Go also change a variable assigned to the same array outside the function?

Rawatan Tatasusunan dalam Go

Dalam Go, tatasusunan ialah nilai, bukan rujukan. Oleh itu, memberikan satu tatasusunan kepada yang lain akan menyalin semua elemen. Selain itu, menghantar tatasusunan kepada fungsi akan memberikan salinan, bukan penunjuk.

Contoh Penjelasan Kod

Pertimbangkan contoh kod berikut:

package main

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

Dalam kod ini, fungsi shuffle mengambil tatasusunan sebagai input dan mengocok elemennya. Walau bagaimanapun, walaupun kami menetapkan tatasusunan asal kepada pembolehubah baharu arr2 sebelum memanggil shuffle, perubahan yang dibuat kepada arr dalam fungsi ditunjukkan dalam arr2.

Slices vs. Arrays

Pergi membezakan antara kepingan dan tatasusunan. Walaupun tatasusunan ialah senarai nilai panjang tetap, kepingan ialah rujukan kepada tatasusunan asas. Dalam contoh kod, kedua-dua arr dan arr2 merujuk kepada tatasusunan asas yang sama. Akibatnya, sebarang pengubahsuaian yang dibuat pada arr juga digunakan pada arr2. Untuk mencipta salinan tatasusunan yang berbeza, hirisan mesti diperuntukkan menggunakan make:

arr := []int{1, 2, 3, 4, 5}
arr2 := make([]int, len(arr))
copy(arr2, arr)
Salin selepas log masuk

Dalam versi yang dikemas kini ini, arr2 bukan lagi rujukan kepada tatasusunan asal, jadi pengubahsuaian yang dibuat kepada arr tidak akan menjejaskan arr2.

Atas ialah kandungan terperinci Mengapakah mengubah suai tatasusunan di dalam fungsi dalam Go juga mengubah pembolehubah yang diberikan kepada tatasusunan yang sama di luar fungsi?. 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!