Nil Map and Nil Slice in Golang

关于nil map和nil slice

前言

我烂了

Nil

Golangnil是对于传统C系语言null所做的一个安全性优化,笔者在学习mapslice有一些相关的疑惑。

在如下代码运行后,map0slice0的值均为nil

var map0 map[string]int
var slice0 []string

与之对应的是比较安全的建立方式,这种情况下建立的空map和空slice都非nil值:

map1 := make(map[string]int, 0)
slice1 := make([]string, 0)

map == nil

对于map增加键值对,前者会发生panic,而后者可以:

map0['maths'] = 60	//panic: assignment to entry in nil map
map1['maths'] = 60	//OK

slice == nil

对于slice的常规操作,则两者都可以进行:

append(slice0, "maths")
append(slice1, "maths")
range(slice0)
range(slice1)
len(slice0)
len(slice1)

原因分析

map增加键值对的行为是在Golang底层实现的,而sliceappend,range,len操作都是在builtin包内的函数实现的,对nil值情况做了差错控制。

结论

make,请。

Luminol Chen
Luminol Chen
2024 Undergraduate in Cyberspace Security

My research interests include cryptography and blochchain.