golang中interface变量,底层两个对象来存,一个是type、一个是value,只有type、value都为nil时,interface变量才是nil
package main
import (
"fmt"
"reflect"
)
type People interface {
Show()
}
type Student struct{}
func (stu *Student) Show() {}
func live() People {
var stu *Student
return 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("我不为空")
}
}