跳到主要内容

零值

零值表

类型零值
boolfalse
int / uint / float / complex0
string""
pointernil
slicenil
mapnil
channelnil
functionnil
interfacenil
struct各字段零值组合
array各元素零值组合

nil

  • nil: pointer、slice、map、channel、function、interface 的零值;
  • 非类型值: nil 本身没有默认具体类型;
  • 比较限制: 只能与可为 nil 的类型值比较;
var p *int = nil // pointer 零值
var s []int = nil // slice 零值
var m map[string]int // map 零值为 nil
println(p == nil, s == nil, m == nil)

零值可用

  • 零值可用: 部分类型零值即可直接使用;
  • nil slice: 可 append, 但不能按索引写入不存在元素;
  • nil map: 可读取, 但写入前必须 make;

sync.Mutex 示例

package main

import "sync"

func main() {
var mu sync.Mutex // sync.Mutex 零值表示未加锁状态
mu.Lock()
mu.Unlock()
}