>  기사  >  백엔드 개발  >  Go에서 사용자 정의 유형에 대한 유형 어설션과 변환의 차이점은 무엇입니까?

Go에서 사용자 정의 유형에 대한 유형 어설션과 변환의 차이점은 무엇입니까?

DDD
DDD원래의
2024-11-06 10:32:02842검색

What's the Difference Between Type Assertions and Conversions for Custom Types in Go?

Go에서 명명된 유형 어설션과 변환 간의 차이점 이해

Go에서 사용자 정의 유형으로 작업할 때 명명된 유형 어설션과 변환 간의 미묘한 차이를 이해하는 것이 중요합니다. 예를 들어 개념을 살펴보겠습니다.

사전 정의된 문자열 유형을 재정의하는 사용자 정의 유형 Answer를 정의하는 아래 코드 조각을 고려하세요.

<code class="go">type Answer string</code>

그런 다음 다음에서 Answer를 사용하려고 합니다. 문자열 유형을 기대하는 함수:

<code class="go">func acceptMe(str string) {
    fmt.Println(str)
}

func main() {
    type Answer string
    var ans Answer = "hello"

    // Assertion fails: cannot use ans (type Answer) as type string in function argument
    acceptMe(ans)

    // Type assertion fails as well: invalid type assertion: ans.(string) (non-interface type Answer on left)
    acceptMe(ans.(string))

    // Conversion succeeds.
    acceptMe(string(ans))
}</code>

왜 어설션이 실패합니까?

유형 어설션은 인터페이스에만 적용 가능합니다. 인터페이스를 사용하면 기본 유형이 달라질 수 있습니다. 실제 유형을 결정하기 위해 Go는 유형 어설션(x.(T)) 또는 유형 스위치(switch x := x.(type))를 사용합니다. 어설션은 어설션이 성공했는지 나타내는 부울 값을 반환합니다.

이 경우 Answer는 고정된 기본 유형(문자열)이 있는 명명된 유형입니다. 기본 유형이 알려져 있으므로 어설션이 필요하지 않습니다. string(ans)을 사용하여 답변 유형을 문자열로 변환하면 충분합니다.

위 내용은 Go에서 사용자 정의 유형에 대한 유형 어설션과 변환의 차이점은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.