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()
요약하면 별칭 유형 간의 변환은 기본 값의 복사본을 생성하지 않지만 이 원칙은 값 전달로 확장되지 않습니다. 일반적으로 복사를 하는 기능입니다.
위 내용은 Go의 별칭 유형 변환은 복사본을 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!