>백엔드 개발 >Golang >Go에서 슬라이스를 딥 카피하는 방법: 추가와 복사?

Go에서 슬라이스를 딥 카피하는 방법: 추가와 복사?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-01 03:44:10684검색

How to Deep Copy a Slice in Go: Append vs. Copy?

Go에서 슬라이스를 간결하고 효율적으로 딥 카피하는 방법

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.