Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah Fungsi `append()` Go Mempengaruhi Gelagat Slice Apabila Dilalui Mengikut Nilai?

Bagaimanakah Fungsi `append()` Go Mempengaruhi Gelagat Slice Apabila Dilalui Mengikut Nilai?

DDD
Lepaskan: 2024-11-20 15:14:15
asal
891 orang telah melayarinya

How Does Go's `append()` Function Affect Slice Behavior When Passed by Value?

Memahami Gelagat Append() pada Slices

Apabila bekerja dengan slice dalam Go, adalah penting untuk memahami bagaimana fungsi append() berinteraksi dengan kepingan yang diluluskan mengikut nilai.

Pertimbangkan coretan kod berikut:

func main() {
    slice := make([]int, 10, 10)
    slice[0] = 0
    slice[1] = 1

    slice1 := slice
    slice1[0] = 10000
    fmt.Println(slice)

    slice1 = append(slice1, 100)
    slice1[0] = 20000

    fmt.Println(slice)
}
Salin selepas log masuk

Dalam contoh ini, dua keping (hirisan dan keping1) dicipta, dengan slice1 pada mulanya menunjuk ke tatasusunan yang sama seperti keping . Walau bagaimanapun, selepas panggilan append() pertama, slice1 diberikan nilai hirisan baharu yang menunjuk kepada tatasusunan berbeza. Tugasan ini menyebabkan tingkah laku slice1 bebas daripada slice.

Penjelasan:

  • Nilai lulus: Dalam Go, semuanya diluluskan mengikut nilai, yang bermaksud slice1 menerima salinan pengepala kepingan slice.
  • Tambah dengan kapasiti: Apabila menambahkan lebih daripada 0 elemen pada kepingan dengan kapasiti yang sama dengan panjangnya (seperti dalam ini case), tatasusunan baharu yang lebih besar diperuntukkan.
  • Penugasan pengepala kepingan: Panggilan append() mengembalikan pengepala kepingan baharu yang menghala ke tatasusunan baharu, yang diperuntukkan kepada slice1.
  • Ketidakbolehubahan:
Perubahan yang dibuat kepada unsur dalam satu kepingan (cth., slice1) tidak akan dipantulkan dalam kepingan yang lain (cth., slice).

Pengurusan memori:

Operasi tambah boleh membawa kepada pengagihan semula memori, mencipta tatasusunan baharu dan berpotensi menjejaskan prestasi.
  • Untuk memahami pengepala kepingan dan dalamannya, rujuk sumber berikut :
  • [Adakah hirisan golang lulus mengikut nilai?](https://stackoverflow.com/questions/25740338/are-golang-slices-pass-by-value) [Go Slices: penggunaan dan dalaman](https://blog.golang.org/slices)

Atas ialah kandungan terperinci Bagaimanakah Fungsi `append()` Go Mempengaruhi Gelagat Slice Apabila Dilalui Mengikut Nilai?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan