Go语言之slice特性

栏目: Go · 发布时间: 6年前

内容简介:golang的数据结构也很多,如List,array,map等,但是有个很特别的数据结构是slice,也叫切片。经常看到很多和数组的定义有关的操作是 make([]string, 10)。那么什么是slice呢?其实slice也算是golang语言特有的数据结构,底层是以数组作为支撑;啥概念呢,就是说在申请一块内存进行数组的存放的时候,slice就像数组对外开放的一扇窗口,让你看到想给你看到的内容。这个比喻还是有些贴切的,但是对于理解slice的内存存储和特性来说还远远不够,在学习一个语言特性的时候,我比较

1 slice介绍和说明

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

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

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

2 slice使用例子和特性

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

Go语言之slice特性

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

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

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

Go语言之slice特性

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其实就是多维数组的操作而已,看到例子截图,也比较灵活,对吧。

Go语言之slice特性

以上所述就是小编给大家介绍的《Go语言之slice特性》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Google's PageRank and Beyond

Google's PageRank and Beyond

Amy N. Langville、Carl D. Meyer / Princeton University Press / 2006-7-23 / USD 57.50

Why doesn't your home page appear on the first page of search results, even when you query your own name? How do other web pages always appear at the top? What creates these powerful rankings? And how......一起来看看 《Google's PageRank and Beyond》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具