[Go] 理解(*interface{})(nil) 赋值的变量是否为nil

2021-05-13 09:54:12 浏览数 (1)

现在有这样两种赋值方式

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

代码语言:javascript复制
    a := (*interface{})(nil)
    log.Printf("%vn", a == nil)
    var c interface{}
    c = (*interface{})(nil)
    log.Printf("%vn", c == nil)

0 人点赞