คิดว่าทุกคนนน่าจะเคยเจอปัญหา อยาก copy, clone array หรือ slice ใน golang แต่ดันต้องสร้าง ตัวแปรใหม่ เขียนวนลูปยืดยาว บลาๆ
แต่จริงๆแล้วใน standard package builtin มี copy ให้ใช้อยู่ ทีนี้เรามาดูดีกว่า ว่าใช้งานยังไง

จากคำอธิบาย ก็คือต้องสร้าง 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)

นั้นก็เพราะ 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)

ลองไปปรับเป็น len สั้น ยาว เล่นๆดูนะ จะทำให้เข้าใจมากขึ้น และนอกจากนี้ ยังสามารถ ปรับตำแหน่งการ copy ได้ด้วยครับ
ลองไป รันดูนะครับ
copy(dst,src[:3]) // ลองแบบนี้
copy(dst[3:],src) // ลองแบบนี้
copy(dst[3:],src[:3]) // ลองแบบนี้