go nil 与零值

go nil 与零值

区别描述:

在Go语言中,nil和零值是两个不同的概念,它们在处理空值或未初始化值时有不同的应用场景。

  1. nil: 在Go语言中,nil表示指针类型的零值或者interface、function、map、slice、channel、error类型的零值。它通常用于表示一个空值或者未初始化的指针或引用类型。如果你尝试对一个nil值进行方法调用,会触发运行时错误。
  2. 零值: 在Go语言中,当你声明一个变量但没有给它赋值时,该变量会被初始化为该类型的零值。零值是Go语言中所有数据类型的默认值。
一些数据类型及其对应的零值:
  • 数值类型:
    • int, int8, int16, int32, int64:0
    • uint, uint8, uint16, uint32, uint64:0
    • float32, float64:0.0* 布尔类型(bool):false
  • 字符串类型(string):“”
  • 数组类型:元素类型的零值
  • 结构体类型(struct):各字段类型的零值
  • 切片类型(slice):nil
  • 映射类型(map):nil
  • 通道类型(channel):nil
  • 接口类型(interface):nil
  • 函数类型(func):nil

请注意,当你使用var声明一个变量但没有为其显式赋值时,Go语言会自动将其初始化为对应类型的零值。例如:

var i int       // i被初始化为0
var b bool      // b被初始化为false
var s string    // s被初始化为空字符串 ""
var arr [3]int  // arr中的元素都被初始化为0
var m map[int]string   // m被初始化为nil
var ch chan bool       // ch被初始化为nil
var iface interface{}  // iface被初始化为nil
var fn func()          // fn被初始化为nil
// ...等等

需要特别注意,对于指针类型,如果没有显式初始化为具体的内存地址,它们会被初始化为nil。

var p *int  // 指针p被初始化为nil

总结:
  • nil是零值的一种特殊情况,用于指针和一些特定类型(如interface、map、slice等)的空值表示。
  • 零值是所有数据类型在声明时的默认初始值,适用于所有数据类型,包括数值类型、布尔类型、字符串类型、数组类型、结构体类型等。
  • 所有的nil值都是零值,但不是所有的零值都是nil。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值