"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > GO 유형 별칭 실패 이유

GO 유형 별칭 실패 이유

2025-04-12에 게시되었습니다
검색:106

Why Does Go's Type Assertion Fail with Type Aliases?

Go에서 유형 별명에 캐스트하는 방법? "FMT"가져 오기 Something -Funcy func (int) bool을 입력하십시오 func funcy (i int) bool { 반환 i%2 == 0 } func main () { var a 인터페이스 {} = funcy _ = a. (func (int) bool) // 작동합니다 fmt.println ( "굉장합니다 - 문자 그대로 func signature Works를 지정합니다.") _ = a. (Something -Funcy) // 패닉 fmt.println ( "darn- 여기에 오지 마라. }

첫 번째 유형 어설 션은 유형을 func (int) bool로 명시 적으로 선언 할 때 작동합니다. 그러나 두 번째는 유형 별명을 사용하여 SomethingFuncy Panics를 사용합니다.

package main

import "fmt"

type somethingFuncy func(int) bool

func funcy(i int) bool {
    return i%2 == 0
}

func main() {
    var a interface{} = funcy

    _ = a.(func(int) bool)  // Works

    fmt.Println("Awesome -- apparently, literally specifying the func signature works.")

    _ = a.(somethingFuncy)  // Panics

    fmt.Println("Darn -- doesn't get here. But somethingFuncy is the same signature as func(int) bool.")
}

캐스팅과 달리 ASSERTED의 실제 유형을 엄격하게 비교합니다. 따라서, 유형 별명 Something -Funcy는 func (int) bool과 동일한 시그니처를 공유하지만 별개의 유형으로 간주됩니다.

보너스

유형 어설 션은 다음 코드에서 수행되며, 이는 단순히 평등에 대한 유형을 비교합니다.

func main () {) {) var a 인터페이스 {} = funcy 스위치 V : = a. (유형) { CASE FUNC (Int) BOOL : // func (int) bool로 성공적으로 주장합니다 사례 무언가 - // 유형은 성공적으로 무언가를 주장했습니다 기본: // 유형 어설 션이 실패했습니다 } }

이 비교는 정확한 유형 일치가 필요하기 때문에 유형 별칭을 사용할 때 실패합니다.
            
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3