切片的内部结构

切片的内部结构

切片的内部结构 #

Go 切片在运行时其实是一个三元组结构,它在 Go 运行时中的表示如下:

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

我们可以看到,每个切片包含三个字段:

  • array: 是指向底层数组的指针;
  • len: 是切片的长度,即切片中当前元素的个数;
  • cap: 是底层数组的长度,也是切片的最大容量,cap 值永远大于等于 len 值。

如果我们用这个三元组结构表示切片类型变量 nums,会是这样: 我们看到,Go 编译器会自动为每个新创建的切片,建立一个底层数组,默认底层数组的长度与切片初始元素个数相同。

Viewpoint #

From #

15|同构复合类型:从定长数组到变长切片