별칭 간 할당이 Go에서 복사를 트리거합니까?
Go에서는 별칭을 사용하여 사용자 정의 유형을 정의할 수 있습니다. 이러한 별칭 유형 간의 변환으로 인해 복사본이 발생하는지 아니면 단순한 구조적 변경이 발생하는지에 대한 우려가 있습니다.
다음 예를 고려하세요.
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s) // Are ms or s2 a full copy of s?
답변:
Go의 변환 규칙에 따르면 숫자 유형이나 문자열 간의 비일관적인 변환은 오류가 발생할 수 있습니다. 표현 변경으로 인한 런타임 비용. 그러나 별칭 간의 변환과 같은 다른 모든 변환은 사본을 생성하지 않고 원래 표현을 보존합니다.
따라서 ms와 s2는 모두 s의 전체 복사본이 아니지만 동일한 기본 값을 참조합니다. .
함수 호출에 미치는 영향:
함수에 값을 전달할 때 일반적으로 복사본이 생성됩니다. 그러나 이는 별칭 유형에는 적용되지 않습니다. 별칭 유형의 값을 함수 매개변수에 할당하면 복사가 트리거되지 않습니다.
func foo(s MyString){ ... } foo(ms) // No copy is made when passing ms to foo()
요약하면 별칭 유형 간의 변환은 기본 값의 복사본을 생성하지 않지만 이 원칙은 값을 함수에 전달하는 것으로 확장되지 않습니다. 일반적으로 복사본이 만들어지는 곳입니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3