更新时间:
#golang interface 小题 接口初始化问题
package main
import (
"fmt"
)
type People interface {
Show()
}
type Student struct{}
func (stu *Student) Show() {
}
func live() People {
var stu *Student
return stu
}
func main() {
if live() == nil {
fmt.Println("AAAAAAA")
} else {
fmt.Println("BBBBBBB") // this is the answer
}
}
这两种interface类型分别用两种struct表示,空接口为eface, 非空接口为iface.

stu是一个指向nil的空指针,但是最后return stu 会触发匿名变量 People = stu值拷贝动作,所以最后live()返回给上层的是一个People insterface{}类型,也就是一个iface struct{}类型。 stu为nil,只是iface中的data 为nil而已。 但是iface struct{}本身并不为nil.
func Foo(x interface{}) { // 空接口
if x == nil {
fmt.Println("empty interface")
return
}
fmt.Println("non-empty interface")
}
func main() {
var p *int = nil
Foo(p)
}
Foo()的形参x interface{}是一个空接口类型eface struct{}。所以 x 结构体本身不为nil,而是data指针指向的p为nil。
