切片(slice)是对数组一个连续片段的引用(该数组我们称之为相关数组,通常是匿名的),所以切片是一个引用类型(因此更类似于C/C++中的数组类型,或者Python中的list类型)。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。
在Go语言中Slice代表变长的序列,序列中每个元素都有相同的类型。一个slice类型一般写作[]T,其中T代表slice中元素的类型;slice的语法和数组很像,只是没有固定长度而已。
Go语言切片的内部结构包含地址、大小和容量。切片一般用于快速地操作一块数据集合。如果将数据集合比作切糕的话,切片就是你要的“那一块”。切的过程包含从哪里开始(这个就是切片的地址)及切多大(这个就是切片的大小)。容量可以理解为装切片的口袋大小,如下图所示。
图:切片结构和内存分配
从数组或切片生成新的切片
切片默认指向一段连续内存区域,可以是数组,也可以是切片本身。
从连续内存区域生成切片是常见的操作,格式如下:slice[开始位置:结束位置]
slice表示目标切片对象。
开始位置对应目标切片对象的索引。
结束位置对应目标切片的结束索引。
从数组生成切片,代码如下:
vara=[3]int{1,2,3}fmt.Println(a,a[1:2])
a是一个拥有3个整型元素的数组,被初始化数值1到3。使用a[1:2]可以生成一个新的切片。代码运行结果如下:[123] [2]
[2]就是a[1:2]切片操作的