文章目录
一、简介
切片本身并不是动态数组或者数组指针。它内部实现的数据结构通过指针引用底层数组,设定相关属性将数据读写操作限定在指定的区域内。切片本身是一个只读对象,其工作机制类似数组指针的一种封装。
切片(slice)是对数组一个连续片段的引用,所以切片是一个引用类型。这个片段可以是整个数组,或者是由起始和终止索引标识的一些项的子集。需要注意的是,终止索引标识的项不包括在切片内。
和数组不同的是,切片的长度可以在运行时修改,最小为 0 最大为相关数组的长度:切片是一个长度可变的数组。
二、数据结构
结构体:
type slice struct {
array unsafe.Pointer
len int
cap int
}
如图:
分析: 切片的结构体由3部分构成,Pointer 是指向一个数组的指针,len 代表当前切片的长度,cap 是当前切片的容量。cap 总是大于等于 len 的。
三、创建切片
1、make 创建:
语法:
slice := make([], len, cap)
选项参数:
len: 切片长度
cap: 切片容量
如图:
分析: 上图是用 make 函数创建的一个 len = 4, cap = 6
的切片。内存空间申请了6个