> 백엔드 개발 > Golang > Go에서 빈 대상 슬라이스에 복사할 때 `copy()`가 빈 슬라이스를 반환하는 이유는 무엇입니까?

Go에서 빈 대상 슬라이스에 복사할 때 `copy()`가 빈 슬라이스를 반환하는 이유는 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-16 09:14:14
원래의
735명이 탐색했습니다.

Why Does `copy()` Return an Empty Slice When Copying to an Empty Destination Slice in Go?

copy()로 빈 슬라이스를 복사하면 빈 슬라이스가 발생하는 이유

Go에서 슬라이스로 작업할 때 copy() 함수는 기존 슬라이스의 복사본을 만드는 데 자주 사용됩니다. 그러나 대상 슬라이스가 비어 있으면 복사 작업이 예기치 않게 작동합니다.

copy()에 대한 설명서에 따르면:

The copy built-in function copies elements from a source slice into a destination slice. (As a special case, it also will copy bytes from a string to a slice of bytes.) The source and destination may overlap. Copy returns the number of elements copied, which will be the minimum of len(src) and len(dst).
로그인 후 복사

이는 복사된 요소의 수가 소스 및 대상 슬라이스 길이의 최소값입니다. 그러나 대상 슬라이스가 비어 있으면(tmp가 빈 슬라이스로 초기화된 예에서와 같이) 요소가 복사되지 않습니다.

이 동작의 이유는 copy() 구현에 있습니다. 이 함수는 소스 슬라이스를 반복하고 소스 또는 대상 슬라이스의 끝에 도달할 때까지 요소를 대상 슬라이스에 복사합니다. 대상 슬라이스가 비어 있으면 복사할 요소가 없으므로 루프가 즉시 종료됩니다.

슬라이스의 비어 있지 않은 복사본을 생성하려면 대상 슬라이스를 0이 아닌 길이로 초기화해야 합니다. 이는 다음 예와 같이 make() 함수를 사용하여 달성할 수 있습니다.

arr := []int{1, 2, 3}
tmp := make([]int, len(arr))
copy(tmp, arr)

fmt.Println(tmp) // Output: [1 2 3]
로그인 후 복사

대상 슬라이스의 길이를 명시적으로 설정하여 copy()에 모든 슬라이스를 복사할 수 있는 충분한 공간이 있는지 확인합니다. 소스 슬라이스의 요소. 이 동작은 복사된 요소 수가 소스 및 대상 슬라이스 길이의 최소값이라는 Go 언어 사양에도 문서화되어 있습니다.

따라서 copy( ), 복사 작업이 성공하도록 하려면 대상 슬라이스를 0이 아닌 길이로 초기화하는 것이 중요합니다.

위 내용은 Go에서 빈 대상 슬라이스에 복사할 때 `copy()`가 빈 슬라이스를 반환하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿