Go의 명명된 유형 어설션 및 변환
Go에서 명명된 유형 어설션 및 변환을 통해 개발자는 사용자 정의 및 사전 정의된 데이터 유형을 조작할 수 있습니다. 그러나 사전 정의된 유형을 재정의하는 사용자 정의 유형을 처리할 때 오해가 발생할 수 있습니다. 이 문제를 자세히 살펴보겠습니다.
다음 코드 예제를 고려하십시오.
<code class="go">type Answer string func acceptMe(str string) { fmt.Println(str) } func main() { type Answer string var ans Answer = "hello" // Illegal usage acceptMe(ans) // Failed type assertion acceptMe(ans.(string)) // Works (but why?) acceptMe(string(ans)) }</code>
Q: 변환이 수행되는 동안 유형 어설션(ans.(string))이 실패하는 이유는 무엇입니까? (string(ans)) 작동합니까?
A: 유형 어설션은 값이 이행할 수 있는 계약을 나타내는 인터페이스 유형에만 적용 가능합니다. Answer와 같은 사용자 정의 유형은 인터페이스가 아니기 때문에 유형 주장 구문을 사용하여 이를 주장하려고 하면 오류가 발생합니다.
반대로 변환은 명시적으로 한 유형을 다른 유형으로 변환합니다. Answer에는 기본 문자열 유형이 있으므로 변환(string(ans))이 성공합니다. Go는 Ans를 acceptMe에 전달하기 전에 암시적으로 기본 문자열로 변환합니다.
추가 참고 사항:
위 내용은 Go에서 사용자 정의 유형을 사용하면 유형 어설션이 실패하지만 변환은 성공하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!