空指针和nil的区别
package main
import “fmt”
type Inter interface { Ping() Pang() }
type St struct{}
func (St) Ping() { println(“ping”) }
func (*St) Pang() { println(“pang”) }
func main() { var st *St = nil var it Inter = st
fmt.Printf("%p\n", st)
fmt.Printf("%p\n", it)
// 注意,空接口有两个字段,一个是实例类型,另一个是指向绑定实例的指针
// 只有两个都为nil时,空接口才为nil。
if it != nil {
it.Pang()
// 下面的语句会导致panic
// 方法转换为函数调用,第一个参数是St类型,由于*St是nil,无法获取指针所指的
// 对象值,所以导致panic
//it.Ping()
}
}

