Go语言之slice特性

华哥Dean · · 751 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

1 slice介绍和说明

golang的数据结构也很多,如List,array,map等,但是有个很特别的数据结构是slice,也叫切片。经常看到很多和数组的定义有关的操作是 make([]string, 10)。那么什么是slice呢?

其实slice也算是golang语言特有的数据结构,底层是以数组作为支撑;啥概念呢,就是说在申请一块内存进行数组的存放的时候,slice就像数组对外开放的一扇窗口,让你看到想给你看到的内容。

这个比喻还是有些贴切的,但是对于理解slice的内存存储和特性来说还远远不够,在学习一个语言特性的时候,我比较推荐的学习方法是,实践一遍,看看例子,然后再根据自己碰到的问题场景,选择合适的解决方案。那么咱们来看例子和运行结果。

2 slice使用例子和特性

整数和字符串的slice操作例子和特性说明:定义,长度(len),和容量(cap)。

2.1 slice的定义和遍历以及属性

所以slice是依托于数组的,并且slice数据结构定义有几个基本属性:len(长度),cap(容量)。可以通过make进行初始化定义的时候制定len和cap: make([]type, len, cap)

从截图中代码和运行结果可以看出来,当前的slice定义中len和cap是一致的,但是slice有一个特点,当append一个新元素的时候len是增加了1,但是cap却不是。如下图:

2.2 slice的len和cap

一开始slice的长度len是3, 容量cap是5,然后通过append后,增加多于容量cap(初始值为5)的元素的时候,slice会重新进行空间分配,但是cap的空间是以第一次的容量cap为基准进行扩容的。

所以slice进行扩容的话,要特别注意,假如你第一个slice空间设置了1k,然后刚好满的时候,这个时候增加1个元素,会导致slice需要2倍的内存空间——2k。

多维slice

3 多维slices

多维slices其实就是多维数组的操作而已,看到例子截图,也比较灵活,对吧。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:华哥Dean

查看原文:Go语言之slice特性

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

751 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传