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。

你可能感兴趣的:(goland,golang,开发语言,后端)