首页 > 后端开发 > Golang > 正文

Go 基础知识:为什么 nil Slices 接受新值,但 nil Map 不接受

Patricia Arquette
发布: 2024-10-01 06:27:29
原创
247 人浏览过

可以将新值添加到 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]
登录后复制

  • Go 支持 Pass By Ref 吗?
  • Go 中的 new 与 make
  • Go 支持继承吗?
  • 如何在 Go 中创建一个简单的 Web 服务器?

要了解有关此类主题的更多信息以及代码示例,请随时查看我的 Github 存储库:

Go Basics: Why nil Slices accept new values, but nil Maps don 赛7xp / 学习golang

Go 语言基础到高级。包括设计模式、SOLID 原则等

以上是Go 基础知识:为什么 nil Slices 接受新值,但 nil Map 不接受的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板