可以将新值添加到 Nil Slice,但将新值添加到 Nil Map 会引发运行时错误。让我们看看为什么
var slice []int // nil slice slice = append(slice, 1) // append works as expected fmt.Println(slice) // [1] var m map[string]int // nil map m["one"] = 1 // ? Runtime panic: assignment to entry in nil map
为什么附加到 Nil 切片有效:
Slice 是对底层数组和动态大小的数据结构的引用。它由 3 个组件组成
当我们声明一个 nil 切片时,长度和容量将为零,并且它不指向任何底层数组。基本上追加操作会检查容量,如果容量不够,则会分配具有足够容量的新底层数组来存储新元素,并返回一个指向新创建数组的新切片。所以追加工作按预期进行。
为什么添加到 Nil Map 不起作用:
golang中的Map基本上充当哈希表,在存储键值对之前需要先初始化内部数据结构。
当我们将一个映射声明为 nil (var m map[string]int) 时,它尚未初始化,还没有准备好存储键值对。因此,当我们尝试向 nil 映射添加值时,这会产生运行时错误。为了避免此类错误,请使用 make
创建地图
var m map[string]int // nil map m = make(map[string]int) // initialize it m["one"] = 1 // map is now initialized, so we can add values print(m) // map[one:1]
要了解有关此类主题的更多信息以及代码示例,请随时查看我的 Github 存储库:
以上是Go 基础知识:为什么 nil Slices 接受新值,但 nil Map 不接受的详细内容。更多信息请关注PHP中文网其他相关文章!