Go语言中的切片(Slice)笔记
1. 切片的概念
在Go语言中,切片是一种动态数组,它可以改变大小并且提供了丰富的功能。切片不是基本的数据类型,而是一种引用类型。它包含三个部分:指向数组元素的指针、长度(len)和容量(cap)。长度表示切片中有多少个元素,而容量则表示切片底层数组可以容纳的最大元素数量。
2. 创建切片
切片可以通过几种方式创建:
-
从数组创建切片:
arr := [5]int{1, 2, 3, 4, 5} slice := arr[0:3] // 创建一个切片,包含arr的前三个元素
-
使用内置函数
make
创建切片:slice := make([]int, 5) // 创建一个长度为5的切片,初始化为零值
-
使用字面量语法创建切片:
slice := []int{1, 2, 3} // 直接初始化切片
3. 切片的扩容
当切片的容量不足以存放更多元素时,可以使用append
函数进行扩容。append
会自动检查切片的容量,如果容量不足,它会创建一个新的底层数组,并将原有元素复制过去,然后添加新元素。
slice := []int{1, 2, 3}
slice = append(slice, 4) // 自动扩容并添加元素
4. 切片的遍历
可以使用for
循环遍历切片:
slice := []int{1, 2, 3}
for i, v := range slice {
fmt.Println("索引:", i, " 值:", v)
}
5. 切片的常见操作
-
追加元素:
slice = append(slice, element)
-
复制切片:
newSlice := make([]int, len(slice)) copy(newSlice, slice)
-
删除切片中的元素:
slice = append(slice[:i], slice[i+1:]...)
6. 切片与数组的区别
- 切片是动态的,数组是静态的。
- 切片包含指向数组的指针、长度和容量,而数组只有元素。
- 切片可以轻松地扩展和收缩,而数组的大小是固定的。
结论
切片是Go语言中非常强大且灵活的数据结构,它简化了数组的使用,提供了动态数组的功能,是处理集合数据时的首选。理解和熟练掌握切片的使用,是每个Go程序员必备的技能之一。