Go에서 별칭 유형 간 변환 시 복사본이 발생합니까?
Go에서는 사용자 정의 유형을 기존 유형의 별칭으로 정의할 수 있습니다. 별칭 유형과 기본 유형 간에 변환할 때 기본 값의 복사본이 만들어졌는지 이해하는 것이 중요합니다.
답변:
Go 사양에 따름 , 사용자 정의 유형의 기본 유형으로 변환하거나 그 반대로 변환해도 데이터의 새 복사본이 생성되지 않습니다. 이는 변환 시 실제 값을 수정하지 않고 유형 설명자만 변경하기 때문입니다.
다음 예에서:
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(s)
ms와 s2는 모두 s의 전체 복사본이 아닙니다. . 이는 동일한 기본 메모리 위치를 참조하는 문자열 구조 복사본일 뿐입니다. 이는 []byte(s)를 사용하여 바이트 배열로 변환하여 데이터의 새 복사본을 생성하는 것과 다릅니다.
별칭 유형 값을 함수에 전달하는 경우:
func foo(s MyString){ ... } foo(ms(s))
값은 값으로 전달되므로 문자열 구조의 복사본이 생성됩니다. 그러나 이 복사본은 여전히 s와 동일한 기본 문자열 데이터를 참조합니다. 따라서 s에 대한 변경 사항은 함수 내에서도 표시됩니다.
위 내용은 Go의 별칭 유형 변환으로 데이터 복사본이 생성되나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!