Gonerics의 아쉬운 점

트위터에 썼던 글인데 블로그 글로 쓸만한 가치가 있는 것 같아서 가져온다.

단점:

  • 반환 타입 포지션에서 유니온 느낌의 타입 제약을 걸 수 없는 점

type Foo interface {
    string|number
}

func foo() Foo {}

이게 불가능하다는 소리다.

  • 인터페이스를 타입 제약으로 사용할 수 없는 점

Tagged union으로 사용할 수 없다는 소리다. 러스트로 나타내면 간단한데...

  • 정의 오류를 사용 (캐스팅) 시점에서 알려주는 점

type Foo interface {
    string
}

func foo() {
    var bar interface{}

    // v,ok := bar.(Foo)
}

위 코드는 에러를 뱉지 않는다.

  • nil일 수 있는 타입을 나타낼 수 없어서 인터페이스랑 같이 쓰면 []*T 꼴이 되는 점