Go에서 별칭 유형으로 작업할 때 별칭과 기본 유형 간의 변환 결과가 궁금할 수 있습니다. 사본으로. 이 질문을 살펴보기 위해 예를 분석해 보겠습니다.
type MyString string var s = "very long string" var ms = MyString(s) var s2 = string(ms)
질문: ms 또는 s2는 s의 완전한 복사본입니까([]byte(s)와 유사). 단순히 문자열 구조의 복사본을 나타냅니다(원본에 대한 포인터 보유). value)?
답변:
Go 변환 사양에 따르면 "다른 모든 변환은 유형만 변경하고 x 표현은 변경하지 않습니다." 따라서 사용자 정의 유형의 기본 유형으로 변환하거나 그 반대로 변환해도 복사본이 생성되지 않습니다. 이 경우 ms와 s2는 s의 복사본이 아니라 단순히 동일한 기본 값의 다른 표현입니다.
별칭 유형을 함수에 전달:
별칭을 전달할 때 함수에 입력하면 값의 복사본이 만들어집니다. 그러나 복사본은 실제로 기본 값의 새 인스턴스를 생성하지 않습니다. 예:
func foo(s MyString) { ... } foo(ms(s)) // No copy is made here
여기서 함수에 전달되는 복사본은 ms가 참조하는 실제 문자열이 아닌 MyString 설명자의 복사본입니다.
위 내용은 Go 별칭 유형 변환: 기본 데이터의 전체 복사본을 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!