
type eface struct { // 16 字节_type *_typedata unsafe.Pointer}
eface 有类型和值,当且仅当 _type 和 data 都为空时,eface 才为 nil
因此不难理解以下代码的输出为何是 false,因为把 s 当作参数传递时,被隐式转换为了 interface{} 类型,此时 data 不为空。
package maintype TestStruct struct{}func NilOrNot(v interface{}) bool {return v == nil}func main() {var s *TestStructfmt.Println(s == nil) // #=> truefmt.Println(NilOrNot(s)) // #=> false}$ go run main.gotruefalse
