型アサーション
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()
}