Go之nil

  • nil是go语言中预先的标识符
  • nil仅可以代表指针、通道(channel)、函数(function)、接口(interface)、映射(map)或切片(slice)的默认零值,也就是在定义这些类型的变量,为其分配内存时是利用nil来充当其默认零值来填充为其分配的内存,而其他类型比如数字则是利用默认值0,布尔类型则是用默认值false来填充对应的内存空间

比如下例:
第一个是因为我们想创建一个demo.Movie这个结构体对象,new()为其分配内存时,为其各个属性分配初始零值或者执行默认初始化比如Title 是string类型,则用默认零值""来初始化Title属性,所以虽然new()函数最终返回一个指针类型,但这个指针并不为nil, 因为其已经指向了一块为demo.Moive分配的零值内存空间,并不需要为其分配零值nil了
而第二个输出,显然我们只声明了一个demo.User类型的指针,但是并没有指定其具体指向内存的哪块存储空间,也就是没有对这个指针变量执行初始化,所以在为其分配空间时,对其进行默认初始化,也就是用指针类型的默认值nil来填充为其分配的内存空间

func main() {
	movie := new(demo.Movie)
	fmt.Printf("movie:%+v movie==nil?%+v\n",movie,movie==nil) //movie:&{Title: Year:0 Color:false Actors:[]} movie==nil?false
	var m2 *demo.Movie  
	fmt.Printf("m2:%+v m2==nil?%+v\n", m2, m2==nil)  //m2:<nil> m2==nil?true
	}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值