Go语言中的slice有点类似于Java中的ArrayList,但在使用上更加灵活,先通过下面一个小例子来体验一下如何通过一个已有的切片来产生一个新切片:
func main() { slice := []int{10,20,30,40,50} newSlice := slice[1:3] // 通过一个slice生成一个新的slice ,两者在底层会共享一部分内存,这个1表示从上一个slice的索引为1的元素开始,
// 3表示取上一个slice的前3个 for _,value := range(newSlice){ fmt.Println(value) } fmt.Println(cap(newSlice)) // 新的slice的容量,从旧slice的索引为1开始算,默认到旧slice的最后一个,所以此处新slice容量为4,
// newSlice := slice[1:3:3] ,第3个能数也可以用来指定新slice的容量
}
输出:
20
30
4
注意:此时新产生的切片和旧切片正供享着同一个底层数组。只有当新产生的切片通过 append方法追加元素超出自身的容量时,才会新复制一个底层数组。