Go의 딥 카피

객체의 복제본을 생성하려고 하면 전체 복사가 원본 객체의 모든 필드를 정확하게 복사합니다. 또한 필드로 개체가 있는 경우 해당 항목의 복사본도 만들어집니다.
즉, 참조(개체)를 포함하는 개체에 대해 전체 복사를 수행하면 원본 개체와 복제된 개체가 모두 별도의 개체를 참조하며 복사된 개체의 데이터에 대한 변경 내용이 원래 개체에 반영되지 않습니다.
Go에서 깊은 복사를 수행하는 방법을 더 잘 이해하기 위해 몇 가지 사례를 살펴보겠습니다.
Go에서 struct
를 사용하여 딥 카피 수행
이러한 깊은 복사를 수동으로 수행할 수 있습니다. 슬라이스의 경우 다음 코드를 사용하여 전체 복사를 수행합니다.
슬라이스가 동일한 슬라이스에 대한 참조일 뿐만 아니라 완전히 별개의 개체임을 알 수 있습니다.
예:
package main
import (
"fmt"
)
type Cat struct {
age int
name string
friends []string
}
func main() {
harry := Cat{1, "Harry", []string{"Ron", "Jenny", "Kety"}}
jay := harry
jay.friends = make([]string, len(harry.friends))
copy(jay.friends, harry.friends)
jay.friends = append(jay.friends, "Sid")
fmt.Println(harry)
fmt.Println(jay)
}
산출
{1 Harry [Ron Jenny Kety]}
{1 Harry [Ron Jenny Kety Sid]}
튜토리얼이 마음에 드시나요? DelftStack을 구독하세요 YouTube에서 저희가 더 많은 고품질 비디오 가이드를 제작할 수 있도록 지원해주세요. 구독하다