Back to Blog

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 꼴이 되는 점