Rumah > pembangunan bahagian belakang > Golang > Mengapakah `copy()` Mengembalikan Slice Kosong Apabila Menyalin ke Slice Destinasi Kosong dalam Go?

Mengapakah `copy()` Mengembalikan Slice Kosong Apabila Menyalin ke Slice Destinasi Kosong dalam Go?

Mary-Kate Olsen
Lepaskan: 2024-12-16 09:14:14
asal
737 orang telah melayarinya

Why Does `copy()` Return an Empty Slice When Copying to an Empty Destination Slice in Go?

Mengapa Menyalin Slice Kosong dengan copy() Menghasilkan Slice Kosong

Apabila bekerja dengan slice dalam Go, fungsi copy() sering digunakan untuk membuat salinan kepingan sedia ada. Walau bagaimanapun, jika kepingan destinasi kosong, operasi penyalinan bertindak secara tidak dijangka.

Menurut dokumentasi untuk copy():

The copy built-in function copies elements from a source slice into a destination slice. (As a special case, it also will copy bytes from a string to a slice of bytes.) The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
Salin selepas log masuk

Ini menunjukkan bahawa bilangan elemen yang disalin hendaklah minimum panjang hirisan sumber dan destinasi. Walau bagaimanapun, apabila kepingan destinasi kosong (seperti dalam contoh anda di mana tmp dimulakan sebagai kepingan kosong), tiada unsur disalin.

Sebab bagi tingkah laku ini terletak pada pelaksanaan copy(). Fungsi ini berulang ke atas kepingan sumber dan menyalin elemen ke kepingan destinasi sehingga ia mencapai penghujung sama ada sumber atau kepingan destinasi. Jika kepingan destinasi kosong, gelung akan tamat serta-merta kerana tiada unsur untuk disalin.

Untuk mencipta salinan bukan kosong bagi kepingan, kepingan destinasi mesti dimulakan dengan panjang bukan sifar. Ini boleh dicapai menggunakan fungsi make(), seperti yang ditunjukkan dalam contoh berikut:

arr := []int{1, 2, 3}
tmp := make([]int, len(arr))
copy(tmp, arr)

fmt.Println(tmp) // Output: [1 2 3]
Salin selepas log masuk

Dengan menetapkan panjang kepingan destinasi secara eksplisit, kami memastikan copy() mempunyai ruang yang mencukupi untuk menyalin semua elemen daripada kepingan sumber. Tingkah laku ini juga didokumenkan dalam Spesifikasi Bahasa Go, yang menyatakan bahawa bilangan elemen yang disalin ialah minimum panjang hirisan sumber dan destinasi.

Oleh itu, apabila cuba menyalin kepingan kosong menggunakan copy( ), adalah penting untuk memulakan kepingan destinasi dengan panjang bukan sifar untuk memastikan operasi penyalinan berjaya.

Atas ialah kandungan terperinci Mengapakah `copy()` Mengembalikan Slice Kosong Apabila Menyalin ke Slice Destinasi Kosong dalam Go?. 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