interface接口类型是golang的最重要的数据结构,底层是value和type组成,实现interface的struct的实例都能赋值给接口类型的变量,实现动态value的能力。type记录value的类型。
![9ffb95ccedabe67f6e1315788d6f3de8.png](https://i-blog.csdnimg.cn/blog_migrate/061329c4ad054f78f9a25f2599d35e2f.jpeg)
int 3 的接口表示是(int, 3),接口的零值是 (nil, nil);就是说一个interface的nil是 type和value都是nil,所以会出现nil的interface和值的nil比较的时候永远不等。
var i interface{} var p *int fmt.Println(p == nil) fmt.Println(i == nil) fmt.Println(i == p) i = p println(i != nil) // true fmt.Println(i.(*int) == nil)
指针的零值是nil,可以通过反射将接口转换成指针类型