Go에서 슬라이스를 복사하려면 원래 배열에 대한 의도하지 않은 수정을 방지하기 위해 새로운 백업 배열을 생성하는 것을 고려해야 합니다. . 이를 달성하기 위한 간결하고 성능이 뛰어난 여러 가지 방법이 있습니다.
한 가지 접근 방식은 추가 기능을 사용하는 것입니다.
copy := append([]T{}, orig...)
여기서 T는 원본 슬라이스 원본의 요소 유형입니다. 그러나 내장된 복사 기능을 사용하는 대체 솔루션이 있습니다.
cpy := make([]T, len(orig)) copy(cpy, orig)
복사 기능은 언어 내에서 슬라이스를 복사하는 데 최적화되어 있습니다. Go 문서에서:
"복사 내장 함수는 소스 슬라이스의 요소를 대상 슬라이스로 복사합니다. ... 복사는 복사된 요소 수를 반환하며, 이는 len(src)의 최소값이 됩니다. 및 len(dst)."
참고:
이러한 솔루션은 슬라이스. 슬라이스에 포인터 또는 포인터 필드가 있는 구조체가 포함된 경우 해당 포인터는 여전히 원래 슬라이스와 동일한 값을 가리킵니다.
벤치마크:
추가 및 복사 테스트 접근 방식은 비슷한 성능 특성을 나타냅니다.
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
벤치마크 결과에 따르면 두 방법 모두 전체 복사에 똑같이 효율적입니다. 조각.
위 내용은 Go에서 슬라이스를 딥 카피하는 방법: 추가와 복사?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!