首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Go中,切片类型的意义是什么?

在Go中,切片类型的意义是什么?
EN

Stack Overflow用户
提问于 2010-01-20 11:35:49
回答 4查看 4.6K关注 0票数 25

我已经阅读了this,但仍然没有完全意识到slice相对于array.So的优势,我期待着有人参与进来,所以解释得比它更好,我相信你可以:)

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-24 13:48:09

切片在数组上有很多用处,其他发帖者已经提到了其中的几个。

  • 切片可以以许多类似指针的方式进行操作。
    • 多个切片可以“指向”相同的基数组
    • 切片是通过引用传递的,但是由于切片本身是一个指针,因此可以更有效地传递“数组”,因为整个数组都不需要是空的

然而,与指针不同的是,memory.

  • Slices为

  • Slice的下溢和溢出触发异常提供了额外的缓冲区安全性,而不是允许您不安全地访问切片的其他区域,从而允许您仅限制对数组的某些区域的访问。这在使用subsets.

时非常有用

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

Stack Overflow用户

发布于 2010-01-20 11:51:55

go中,数组是按值传递的;因此,要“按引用传递”,需要使用片。这还不是全部!引用Go的tutorial

数组的大小是其类型的一部分;但是,可以声明切片变量,可以将指针分配给具有相同元素类型的任何数组,或者-更常见的是-形式为low : high的切片表达式,表示从low到high-1索引的子数组。切片看起来很像数组,但没有显式的大小([]与10),并且它们引用了底层的、通常是匿名的常规数组的一段。如果多个片表示同一数组的片段,则它们可以共享数据;多个数组永远不能共享数据。

在Go程序中,切片比常规数组更常见;它们更灵活,具有引用语义,并且效率更高。它们缺少的是对常规数组存储布局的精确控制;如果您希望在结构中存储一个数组的100个元素,则应该使用常规数组。

在将数组传递给函数时,您几乎总是希望将形参声明为片。当您调用该函数时,获取数组的地址,Go将(有效地)创建一个切片引用并传递该引用。

票数 14
EN

Stack Overflow用户

发布于 2011-06-02 09:03:37

我认为Go博客上的this post对切片和数组的描述要好得多,也更详细。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2098874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档