Go에서는 원래 백업 배열의 수정을 방지하기 위해 효율적으로 슬라이스의 심층 복사를 생성하는 것이 필수적입니다. 일반적으로 사용되는 접근 방식 중 하나는 슬라이스 리터럴과 추가 기능을 사용하는 것입니다.
copy := append([]T{}, orig...)
그러나 내장된 복사 기능을 활용하는 대체 방법이 있습니다.
cpy := make([]T, len(orig)) copy(cpy, orig)
이 접근 방식은 필요한 저장소를 검색하고 복사 내장 기능을 사용하여 소스에서 대상으로 요소를 직접 복사합니다. 문서에 따르면:
func copy(dst, src []Type) int
The copy built-in function copies elements from a source slice into a destination slice. ... Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
참고:
두 방법 모두 얕은 복사를 수행합니다. 즉, 슬라이스 내의 포인터 또는 구조체 필드는 여전히 가리킵니다. 원본으로 값입니다.
벤치마크:
두 기술의 성능을 비교하면 비슷한 결과가 나옵니다.
BenchmarkCopy 100000 24724 ns/op BenchmarkAppend 100000 24967 ns/op
이는 두 접근 방식이 모두 다음에 동일하게 적합하다는 것을 의미합니다. Go의 딥 카피 슬라이스. 그러나 큰 조각을 처리할 때는 복사 기능 접근 방식이 약간 더 효율적일 수 있습니다.
위 내용은 Go에서 슬라이스를 효율적으로 심층 복사하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!