3 回答

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

TA貢獻1859條經驗 獲得超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:用法和內部結構”:
復制功能支持在不同長度的切片之間進行復制(它只會復制到較少數量的元素)
通常的例子是:
t := make([]byte, len(s), (cap(s)+1)*2)
copy(t, s)
s = t
- 3 回答
- 0 關注
- 279 瀏覽
添加回答
舉報