slice

数据结构 #

type slice struct {
	array unsafe.Pointer // 指向底层数组的指针
	len   int            // 切片的长度
	cap   int            // 切片的容量
}

创建 #

// 此时s的长度和容量都是5。
s := make([]int, 5)
// 此时s的长度是3,容量是5。
s := make([]int, 3, 5)

取值 #

// 该方式没有指定开始和结束索引,是从索引0开始取到结束,即取出slice a的全部元素。
a[:]
// 指定开始索引startIndex,结束索引取到结尾。比如a[1:]会从索引1开始取到最后一个元素。
a[startIndex:]
// 指定结束索引endIndex,开始索引从0开始。比如a[:3]会取索引0-2的三个元素。
a[:endIndex]
// 指定开始索引和结束索引区间。比如a[1:3]会取索引1和2的两个元素。
a[startIndex:endIndex]
// 三个索引除了开始和结束索引外,还可以指定容量capacity。这种方式可以对slice进行扩容或缩容操作。
a[startIndex:endIndex:capacity]
  • a[:] - 取所有元素
  • a[1:] - 从索引1开始取到最后
  • a[:3] - 取索引0-2的三个元素
  • a[1:3] - 取索引1和2的两个元素
  • a[1:3:5] - 取索引1-2但是扩容为5