golang中interface变量,底层两个对象来存,一个是type、一个是value,只有type、value都为nil时,interface变量才是nil
package mainimport ("fmt""reflect"
)type People interface {Show()
}type Student struct{}func (stu *Student) Show() {}func live() People {var stu *Studentreturn stu
}func main() {i := live()fmt.Println(reflect.TypeOf(i))fmt.Println(i)if i == nil {fmt.Println("我是为空")} else {fmt.Println("我不为空")}
}
输出结果为:
可以看到interface 变量i,虽然值为nil,但类型是Student
如果想判断变量value是否为空,可以指定type
func main() {i := live()fmt.Println(reflect.TypeOf(i))fmt.Println(i)if i == (*Student)(nil) {fmt.Println("我是为空")} else {fmt.Println("我不为空")}
}