零值
零值表
| 类型 | 零值 |
|---|---|
| bool | false |
| int / uint / float / complex | 0 |
| string | "" |
| pointer | nil |
| slice | nil |
| map | nil |
| channel | nil |
| function | nil |
| interface | nil |
| 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()
}