"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Go의 별칭 유형 변환은 복사본을 생성합니까?

Go의 별칭 유형 변환은 복사본을 생성합니까?

2024년 12월 21일에 게시됨
검색:711

Does Go's Alias Type Conversion Create Copies?

별칭 간 할당이 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