知识卡片

数组值语义与切片引用语义的取舍

专业/工作 · 483.a

内容

Go的数组是值类型,长度固定且传递时整体拷贝——传一个大数组代价很高,除非改传指针;切片则是引用类型,无论底层数组多大,切片本身传递的成本都固定极小(64位机器上16字节),因为传递的只是”指向底层数组的指针+长度+容量”这个轻量结构,不是数据本体。发散:这体现了”类型默认行为决定使用习惯”的设计影响——语言把切片设计得比数组更方便、更便宜,实际上是用API设计引导开发者走向正确的默认选择,。

参考来源

- 位置:《Go语言程序设计》第4章《集合类型》(源文件:_epub-src/OEBPS/text00038.html) - 结论依据:原文在该章节围绕“Go的数组是值类型,长度固定且传递时整体拷贝——传一个大数组代价很高,除非改传指针;切片则是引用类型,无论底层…”给出定义、示例或限制条件;摘录中的术语、代码片段或对比关系直接支撑本卡片的结论。 - 原始内容:一个大数组的代价非常大。幸运的是,在Go语言中数组不常用到,因为我们可以使用切片来代替。我们将在下面章节讲解切片的用法。传递一个切片的成本与字符串差不多(在64位机器上为16字节,在32位机器上为12字节),无论该切片的长度或者容量是多大 ② 。另外,修改切片也不会导致写时复制的负担,因为不同于字符串的是,切片是可变的(如果一个切片被修改…