Go 的內建函數,針對 slice 做資料複製,類似 c 的 memcpy
原型:
func copy(dst, src []Type) int
如果成功複製會傳回複製的個數
dst src 可以在同一個 slice 內操作
dst src 可以指定開始與結束的位置
copy(a1[5:6], a1[8:])
/*
result: a1: [1 3 5 7 9 19 13]
src 指定要複製8開始到最後,但是 dst 指定只能複製到第5的位置,因此只有複製 19 過來
*/
copy 常用在移除元素(remove elements)
下面註解的部分是在同一個 slice 操作
a3 則是建立新的 slice 存放結果
Code:
a1 := []int{1, 3, 5, 7, 9, 11, 13, 17, 19, 23}
a2 := make([]int, 15, 30)
fmt.Println("a1:", a1)
fmt.Println("a2:", a2)
copy(a2[10:], a1)
fmt.Println("a2:", a2)
//remove 11, 13, 17
//copy(a1[5:], a1[8:])
//a1 = a1[:7]
a3 := make([]int, 7)
copy(a3[:5], a1)
copy(a3[5:], a1[8:])
fmt.Println("a3:", a3)
Result:
a1: [1 3 5 7 9 11 13 17 19 23]
a2: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]
a2: [0 0 0 0 0 0 0 0 0 0 1 3 5 7 9]
a3: [1 3 5 7 9 19 23]
http://play.golang.org/p/6MQcr5lu7t