Go의 명명된 유형 어설션 및 변환
Go에서 사용자 정의 유형을 정의할 때 사전 정의된 유형을 새 이름으로 재정의할 수 있습니다. 그러나 미리 정의된 유형을 기대하는 함수에서 이러한 사용자 정의 유형을 사용하려고 하면 오류가 발생할 수 있습니다. 이러한 오류의 원인을 자세히 알아보고 해결 방법을 살펴보겠습니다.
다음 코드를 고려하세요.
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { var ans Answer = "hello" // Cannot use ans (type Answer) as type string in function argument acceptMe(ans) // Invalid type assertion: ans.(string) (non-interface type Answer on left) acceptMe(ans.(string)) // Works, but why? acceptMe(string(ans)) }</code>
유형 어설션이 실패하는 이유
Type 어설션은 인터페이스에서만 작동합니다. 인터페이스에는 유형 어설션 또는 유형 전환을 허용하는 모든 기본 유형이 있을 수 있습니다. 그러나 이 경우 Answer는 단일 기본 유형인 문자열을 사용하는 사용자 정의 유형입니다. 기본 유형으로의 변환은 성공이 보장되므로 유형 어설션이 필요하지 않습니다.
변환이 작동하는 이유
반면에 변환은 수행될 수 있습니다. Answer와 string의 경우처럼 알려진 관계가 있는 유형 간입니다. string(ans) 구문은 Answer 유형을 기본 문자열 유형으로 명시적으로 변환합니다.
결론
유형 어설션과 변환 간의 차이점을 이해하는 것이 중요합니다. 기본 유형을 동적으로 확인하려면 인터페이스와 함께 유형 어설션을 사용해야 합니다. 반면에 변환은 알려진 관계가 있는 유형 간에 명시적으로 변환하는 데 사용됩니다. Answer 및 문자열의 경우 변환은 기본 유형과 상호 운용하는 예측 가능하고 명확한 방법을 제공하므로 권장되는 접근 방식입니다.
위 내용은 Go에서 사용자 정의 유형을 사용할 때 유형 어설션이 실패하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!