为了账号安全,请及时绑定邮箱和手机立即绑定

Go中的切片类型有什么意义?

Go中的切片类型有什么意义?

Go
慕标5832272 2021-04-01 15:11:36
我已经读过这篇文章,但仍然没有完全意识到slice对付的优势array。因此,我希望SO中的某人能比它更好地进行解释,并且我相信您可以做到:)
查看完整描述

3 回答

?
12345678_0001

TA贡献1802条经验 获得超5个赞

切片在数组上有很多用途,其他一些张贴者已经提到过。

  • 切片可以通过多种方式进行操作,例如指针。

    • 多个切片可以“指向”相同的基本数组

    • 切片是通过引用传递的,但是由于切片本身是指针,因此可以使用它来更有效地传递“数组”,因为不需要复制整个数组。

  • 但是,与指针不同,切片提供了额外的缓冲区安全性

    • 切片下溢和上溢会触发异常,而不是使您不安全地访问内存的其他区域。

    • 通过切片,您可以将访问权限限制为仅访问阵列的某些区域。这在处理子集时可能非常有用。

  • 切片的长度是在运行时动态确定的,这与数组的大小在编译时是固定的不同。同样,可以在运行时动态调整切片的大小。


查看完整回答
反对 回复 2021-04-26
?
PIPIONE

TA贡献1829条经验 获得超9个赞

在中go,数组按值传递;因此,要“通过引用传递”,您需要使用一个切片。不仅如此!引用Go的教程:

数组的大小是其类型的一部分;但是,可以声明一个slice变量,可以将一个指针分配给具有相同元素类型的数组,或者(更常见的是)a [low:high]形式的slice表达式,该子表达式表示由low到索引的子数组。高1。切片看起来很像数组,但没有显式的大小([]与[10]),它们引用基础(通常是匿名)规则数组的一部分。如果多个切片代表同一数组的各个部分,则它们可以共享数据。多个阵列永远无法共享数据。

在Go程序中,切片比常规数组更常见。它们更加灵活,具有参考语义并且高效。他们缺乏的是对常规阵列的存储布局的精确控制。如果要在结构中存储数组的一百个元素,则应使用常规数组。

将数组传递给函数时,几乎总是希望将形式参数声明为切片。调用函数时,获取数组的地址,然后Go将创建(有效地)切片引用并将其传递。


查看完整回答
反对 回复 2021-04-26
?
智慧大石

TA贡献1946条经验 获得超3个赞

除了已经给出的答案之外,还可以动态调整切片的大小,而不能调整数组的大小。也就是说,您只能使用常量来指定数组的大小,而可以使用变量来指定切片的大小。


查看完整回答
反对 回复 2021-04-26
  • 3 回答
  • 0 关注
  • 382 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信