下面这段代码输出什么?为什么?
type People interface {
Show()
}
type Student struct{}
func (stu *Student) Show() {
}
func main() {
var s *Student
if s == nil {
fmt.Println("s is nil")
} else {
fmt.Println("s is not nil")
}
var p People = s
if p == nil {
fmt.Println("p is nil")
} else {
fmt.Println("p is not nil")
}
}
Dazso
当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
接口分为:动态值,动态类型
mark
打卡
打卡
mark
mark
mark 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
interface 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
m
打卡
当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。上面的代码,给变量 p 赋值之后,p 的动态值是 nil,但是动态类型却是 *Student,是一个 nil 指针,所以相等条件不成立。学习了,加油!!!
卡
"s is nil" "p is not nil"
当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil。
当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
mark
1
mark
打卡
*student 是一个nil指针 并不是nil 也就是动态类型与动态值不相等!关键点是:动态类型与动态值均为nil的时候 接口才为nil !!!
interface 当且仅当动态值和动态类型都为 nil 时,接口类型值才为 nil
mark
mark
"s is nil" "p is not nil"
mark