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

我已经读过这篇文章,但仍然没有完全意识到slice对付的优势array。因此,我希望SO中的某人能比它更好地进行解释,并且我相信您可以做到:)


慕标5832272
浏览 383回答 3
3回答

12345678_0001

切片在数组上有很多用途,其他一些张贴者已经提到过。切片可以通过多种方式进行操作,例如指针。多个切片可以“指向”相同的基本数组切片是通过引用传递的,但是由于切片本身是指针,因此可以使用它来更有效地传递“数组”,因为不需要复制整个数组。但是,与指针不同,切片提供了额外的缓冲区安全性切片下溢和上溢会触发异常,而不是使您不安全地访问内存的其他区域。通过切片,您可以将访问权限限制为仅访问阵列的某些区域。这在处理子集时可能非常有用。切片的长度是在运行时动态确定的,这与数组的大小在编译时是固定的不同。同样,可以在运行时动态调整切片的大小。

PIPIONE

在中go,数组按值传递;因此,要“通过引用传递”,您需要使用一个切片。不仅如此!引用Go的教程:数组的大小是其类型的一部分;但是,可以声明一个slice变量,可以将一个指针分配给具有相同元素类型的数组,或者(更常见的是)a [low:high]形式的slice表达式,该子表达式表示由low到索引的子数组。高1。切片看起来很像数组,但没有显式的大小([]与[10]),它们引用基础(通常是匿名)规则数组的一部分。如果多个切片代表同一数组的各个部分,则它们可以共享数据。多个阵列永远无法共享数据。在Go程序中,切片比常规数组更常见。它们更加灵活,具有参考语义并且高效。他们缺乏的是对常规阵列的存储布局的精确控制。如果要在结构中存储数组的一百个元素,则应使用常规数组。将数组传递给函数时,几乎总是希望将形式参数声明为切片。调用函数时,获取数组的地址,然后Go将创建(有效地)切片引用并将其传递。

智慧大石

除了已经给出的答案之外,还可以动态调整切片的大小,而不能调整数组的大小。也就是说,您只能使用常量来指定数组的大小,而可以使用变量来指定切片的大小。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go