Go

interface型でない変数の型アサーション

More than 5 years have passed since last update.

型アサーション

t, ok := x.(T)

のxはinterface型でないといけないので
interface型でない変数に対してメソッドを実装してるかどうか確認するには
一度interface型にキャストしないといけないらしい。

type Tester interface {
    Test()
}

type A struct{}

func (a A) Test() {
    fmt.Println("called A.Test()")
}

func main() {
    a := new(A)
    tester, ok := interface{}(a).(Tester)
    //tester, ok := a.(Tester) //ERROR!
    fmt.Println("a is a Tester:", ok)
    tester.Test()
}

http://play.golang.org/p/ls7nOtceXA