Go slice的底层实现原理?

切片是基于数组实现的,它的底层是数组,可以理解为对底层数组的抽象,其占用 24 个字节,包含数据指针(8字节)、切片的长度(8字节)、切片的容量(8字节)三个字段,数据结构如下:

type slice struct {
	array unsafe.Pointer
	len   int
	cap   int
}

array 指向底层数组的指针。
len 切片的长度。
cap 切片的容量,满足 cap >= len

切片的初始化方式

// 初始化方式1:直接声明
var slice1 []int

// 初始化方式2:使用字面量
slice2 := []int{1, 2, 3, 4}

// 初始化方式3:使用make创建slice
slice3 := make([]int, 3, 5)         

// 初始化方式4: 从切片或数组“截取”
slcie4 := arr[1:3]
posted @ 2023-12-04 18:42  石乾智的博客  阅读(43)  评论(0)    收藏  举报