我已阅读this但仍未充分了解slice
对array
的优势。所以我期待有人在SO中解释得比它好,我相信你可以: )
答案 0 :(得分:19)
切片在数组上有很多用途,其中一些海报已经提到过。
答案 1 :(得分:13)
在go
中,数组按值传递;因此,要“通过引用传递”,您使用切片。这还不是全部!引用Go tutorial:
数组的大小是其中的一部分 类型;但是,可以声明一个切片 变量,可以指定一个变量 指向任何具有相同数组的指针 元素类型或更常见的 - a 形式的切片表达式[低: 高],代表子阵 索引由低到高-1。片 看起来很像阵列但没有 显式大小([]与[10])和它们 引用底层的一部分, 通常是匿名的,常规的数组。 多个切片可以共享数据 表示相同阵列的片段; 多个数组永远不能共享数据。
切片在Go中更为常见 程序比常规数组;他们是 更灵活,有参考 语义,并且是有效的。什么 他们缺乏的是对...的精确控制 常规数组的存储布局;如果 你想拥有一百个元素 存储在结构中的数组, 你应该使用常规数组。
将数组传递给函数时, 你几乎总想宣布 形式参数是一个切片。什么时候 你打电话给这个功能吧 数组的地址和Go将 创建(有效)切片参考 通过那个。
答案 2 :(得分:2)
我认为切片和数组在Go Blog上的this post中描述得更好更详细。
答案 3 :(得分:0)
除了已经给出的答案之外,切片可以动态调整大小,而数组则不能。也就是说,您只能使用常量来指定数组的大小,而您可以使用变量来指定切片的大小。