package main import ( "fmt" "math" ) type I interface { M() } type T struct { S string } func (t *T) M() { if t == nil { fmt.Println("") return } fmt.Println(t.S) } type F float64 func (f F) M() { fmt.Println(f) } func describe(i I) { fmt.Printf("(%v, %T)\n", i, i) } func main() { var i I // These lines will cause a run-time error due to nil pointer dereferencing // describe(i) // i.M() var t *T i = t describe(i) i.M() i = &T{"hello"} describe(i) i.M() i = F(math.Pi) describe(i) i.M() }