Rumah > pembangunan bahagian belakang > Golang > Cara Mendalam Menyalin Slice dalam Go: Tambah vs. Salin?

Cara Mendalam Menyalin Slice dalam Go: Tambah vs. Salin?

Mary-Kate Olsen
Lepaskan: 2025-01-01 03:44:10
asal
710 orang telah melayarinya

How to Deep Copy a Slice in Go: Append vs. Copy?

Cara Mendalam Menyalin Slice dalam Go Concis dan Cekap

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

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

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

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!

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