3 回答

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個贊
內(nèi)置copy(dst, src)復(fù)制min(len(dst), len(src))元素。
因此,如果您的dst值為空 ( len(dst) == 0),則不會復(fù)制任何內(nèi)容。
嘗試tmp := make([]int, len(arr))(去游樂場):
arr := []int{1, 2, 3}
tmp := make([]int, len(arr))
copy(tmp, arr)
fmt.Println(tmp)
fmt.Println(arr)
輸出(如預(yù)期):
[1 2 3]
[1 2 3]
不幸的是,這在builtin包中沒有記錄,但在Go Language Specification: Appending to and copying slices 中有記錄:
復(fù)制的元素的數(shù)目是最小len(src)和len(dst)。
編輯:
最后,文檔copy()已更新,現(xiàn)在包含將復(fù)制源和目標(biāo)的最小長度的事實(shí):
Copy 返回復(fù)制的元素?cái)?shù),這將是len(src) 和 len(dst) 中的最小值。

TA貢獻(xiàn)1859條經(jīng)驗(yàn) 獲得超6個贊
如果您的切片大小相同,它將起作用:
arr := []int{1, 2, 3}
tmp := []int{0, 0, 0}
i := copy(tmp, arr)
fmt.Println(i)
fmt.Println(tmp)
fmt.Println(arr)
會給:
3
[1 2 3]
[1 2 3]
來自“ Go Slices:用法和內(nèi)部結(jié)構(gòu)”:
復(fù)制功能支持在不同長度的切片之間進(jìn)行復(fù)制(它只會復(fù)制到較少數(shù)量的元素)
通常的例子是:
t := make([]byte, len(s), (cap(s)+1)*2)
copy(t, s)
s = t
- 3 回答
- 0 關(guān)注
- 283 瀏覽
添加回答
舉報(bào)