Dalam Go, menyalin kepingan memerlukan pertimbangan untuk mencipta tatasusunan sandaran baharu untuk mengelakkan pengubahsuaian yang tidak disengajakan pada tatasusunan asal . Terdapat beberapa cara ringkas dan berprestasi baik untuk mencapai matlamat ini.
Satu pendekatan ialah menggunakan fungsi tambah:
copy := append([]T{}, orig...)
di mana T ialah jenis elemen bagi orig kepingan asal. Walau bagaimanapun, penyelesaian alternatif wujud menggunakan fungsi salinan terbina dalam:
cpy := make([]T, len(orig)) copy(cpy, orig)
Fungsi salin dioptimumkan untuk menyalin kepingan dalam bahasa. Daripada dokumentasi Go:
"Fungsi terbina dalam salinan menyalin elemen daripada kepingan sumber ke dalam kepingan destinasi. ... Copy mengembalikan bilangan elemen yang disalin, yang akan menjadi minimum len(src) dan len(dst)."
Nota:
Adalah penting untuk diingat bahawa penyelesaian ini menyalin nilai dalam kepingan. Jika hirisan mengandungi penunjuk atau struct dengan medan penuding, penunjuk tersebut masih akan menunjuk kepada nilai yang sama seperti hirisan asal.
Tanda Aras:
Menguji lampiran dan salin pendekatan mendedahkan ciri prestasi yang serupa:
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
Hasil penanda aras menunjukkan bahawa kedua-dua kaedah adalah sama cekap untuk penyalinan mendalam kepingan.
Atas ialah kandungan terperinci Cara Mendalam Menyalin Slice dalam Go: Tambah vs. Salin?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!