知识卡片

nil切片被当作空切片对待

专业/工作 · 1371.a

内容

一个只声明未赋值的切片变量,零值是 nil,但 Go 特意把内建函数写成让 nil 切片和空切片表现 完全一致:对 nil 切片调用 len 会得到 0,对它调用 append 会像对空切片一样正常追加出第一个 元素,不会报错或需要特殊判断。发散:很多语言要求”用集合之前先判断它是否为 null”,这本质 上是把一种本可以统一处理的边界情况,变成了调用方必须手动记住的例外;Go 在这里选择让语言的 内建行为主动吸收掉这。

参考来源

- 位置:《Head First Go语言程序设计》第6章《追加的问题:切片》(源文件:_epub-src/index_split_001.html) - 结论依据:原文在该章节围绕“一个只声明未赋值的切片变量,零值是nil,但Go特意把内建函数写成让nil切片和空切片表现完全一致:对nil切…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:的名字的字符 串。从os.Open会返回两个值:指向代表被打开文件的os.File值的指针, 以及一个错误值。正如我们在许多其他函数中看到的那样,如果错误值 为nil,则表示文件被成功打开,但是任何其他值都表示存在错误。(如 果文件丢失或不可读,就可能会发生这种情况。)如果是这种情况,我 们会记录错误信息并退出程序。 然后我们将os.Fi…