现在有这样两种赋值方式

a := (*interface{})(nil)

var c interface{} c = (*interface{})(nil)

 

a现在是啥 ?

(*interface{})(nil) 意思是把nil 类型转换为  *interface{}类型

a相当于  var a *interface{} = nil    ,  a是个指针 , 指向了nil  , 所以a是nil

 

c现在是啥 ?

c是 interface{} 类型 , 这个类型有两个属性 , type和data  , 

c的type属性是*interface{}   有值  ,  c的data属性是nil 无值

只有当type和data都是nil时  ,  空接口才是nil  ,  所以c不是nil 

 

a := (*interface{})(nil)

log.Printf("%v\n", a == nil)

var c interface{}

c = (*interface{})(nil)

log.Printf("%v\n", c == nil)

 

相关链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。