切片是 Go 语言中一个非常重要的数据结构,它类似于数组,但是长度可以动态变化。在 Go 中,切片本质上是一个指向底层数组的指针、长度和容量。
声明切片的方式如下:
var slice []int // 声明一个空切片
slice := []int{1, 2, 3} // 声明并初始化切片
也可以使用 make 函数来创建切片:
slice := make([]int, 3) // 创建长度为3的切片
slice := make([]int, 3, 5) // 创建长度为3,容量为5的切片
其中第二个参数表示长度,第三个参数表示容量。当容量小于等于长度时,每次增加元素都会重新分配内存;当容量大于长度时,在添加元素时不需要重新分配内存。
可以使用 append 函数向切片中添加元素:
slice = append(slice, 4)
slice = append(slice, 5, 6)
如果添加的元素超过了当前容量,则会重新分配内存,并将原来的元素复制到新的数组中。
可以使用 for 循环遍历切片:
for i := range slice {
fmt.Println(slice[i])
}
也可以使用 range 关键字遍历:
for i, v := range slice {
fmt.Println(i, v)
}
对于需要删除或者插入某些元素的情况,可以使用切片的内置函数 copy 和 append:
slice1 := []int{1, 2, 3}
slice2 := []int{4, 5, 6}
copy(slice1[1:], slice2) // 将 slice2 的元素复制到 slice1 中
fmt.Println(slice1) // [1 4 5]
slice3 := append(slice1[:2], slice2...) // 在 slice1 中插入 slice2 的元素
fmt.Println(slice3) // [1 4 5 6]
切片的底层数据结构是数组,因此在传递切片时,实际上是传递了指向数组的指针。当改变切片中的元素时,底层数组也会发生相应的变化。这就意味着,在多个函数中共享同一个切片时需要注意对其进行正确地修改和使用。
总之,切片是 Go 中非常常用的数据结构之一,学习和掌握其基本操作对于编写高效、可读性强且易维护的代码至关重要。




