วิธีใช้ copy ใน golang

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

แต่จริงๆแล้วใน standard package builtin มี copy ให้ใช้อยู่ ทีนี้เรามาดูดีกว่า ว่าใช้งานยังไง

function copy ใน package builtin

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

ลองไปปรับเป็น len สั้น ยาว เล่นๆดูนะ จะทำให้เข้าใจมากขึ้น และนอกจากนี้ ยังสามารถ ปรับตำแหน่งการ copy ได้ด้วยครับ
ลองไป รันดูนะครับ

copy(dst,src[:3]) // ลองแบบนี้
copy(dst[3:],src) // ลองแบบนี้
copy(dst[3:],src[:3]) // ลองแบบนี้