คิดว่าทุกคนนน่าจะเคยเจอปัญหา อยาก copy, clone array หรือ slice ใน golang แต่ดันต้องสร้าง ตัวแปรใหม่ เขียนวนลูปยืดยาว บลาๆ
แต่จริงๆแล้วใน standard package builtin มี copy ให้ใช้อยู่ ทีนี้เรามาดูดีกว่า ว่าใช้งานยังไง
![](https://kreangkrai.com/wp-content/uploads/2021/07/image-1024x219.png)
จากคำอธิบาย ก็คือต้องสร้าง array หรือ slice มารับ dst หรือ destination นั้นเอง
ส่วน src คือ ย่อมาจาก resource หรือข้อมูลตั้งต้นที่เราต้องการ
src:=[]int{-1, 150, 190, 170, -1, -1, 160, 180}
dst := []int{}
fmt.Println(dst)
copy(dst,src)
fmt.Println(dst)
![](https://kreangkrai.com/wp-content/uploads/2021/07/image-1-1024x448.png)
นั้นก็เพราะ dst ที่เราสร้างไม่ได้ ใส่ cap ไว้นั้นเอง ดังนั้น พอ copy จาก src ไป dst ที่ไม่ได้จองพื้นที่ไว้ เลยได้เป็น []
src:=[]int{-1, 150, 190, 170, -1, -1, 160, 180}
dst := make([]int,len(src))
fmt.Println(dst)
copy(dst,src)
fmt.Println(dst)
![](https://kreangkrai.com/wp-content/uploads/2021/07/image-2-1024x467.png)
ลองไปปรับเป็น len สั้น ยาว เล่นๆดูนะ จะทำให้เข้าใจมากขึ้น และนอกจากนี้ ยังสามารถ ปรับตำแหน่งการ copy ได้ด้วยครับ
ลองไป รันดูนะครับ
copy(dst,src[:3]) // ลองแบบนี้
copy(dst[3:],src) // ลองแบบนี้
copy(dst[3:],src[:3]) // ลองแบบนี้