package main import ( "fmt" "reflect" ) type Fooer interface { Foo() } type Fooo struct{} func (f *Fooo) Foo() { if f == nil { fmt.Println("nil!!") } else { fmt.Println("not nil!!") } } func newFooer() Fooer { return &Fooo{} } func bar(f Fooer) { f.Foo() } func main() { // 型を代入したあとnilを入れても型情報は消えない z := &Fooo{} fmt.Println(reflect.TypeOf(z)) // *main.Fooo z = nil fmt.Println(reflect.TypeOf(z)) // *