interface接口类型是golang的最重要的数据结构,底层是value和type组成,实现interface的struct的实例都能赋值给接口类型的变量,实现动态value的能力。type记录value的类型。
int 3 的接口表示是(int, 3),接口的零值是 (nil, nil);就是说一个interface的nil是 type和value都是nil,所以会出现nil的interface和值的nil比较的时候永远不等。

  1. var i interface{}
  2. var p *int
  3. fmt.Println(p == nil) // true
  4. fmt.Println(i == nil) // true
  5. fmt.Println(i == p) // false
  6. i = p
  7. println(i != nil) // true
  8. fmt.Println(i.(*int) == nil) // true

指针的零值是nil,可以通过反射将接口转换成指针类型。

不得不知道的golang知识点之nil

golang原理篇- nil:接口类型和值类型的区别

Go中error类型的nil值和nil

Go语言之nil详解

如何理解 golang nil

理解golang中什么是nil

Go语言之nil详解

Golang中的nil,没有人比我更懂nil!