Golang 第四章 2.切片
切片是 基于数组的动态序列,它比数组更灵活。
切片可以动态增长
切片共享底层数组
切片长度可变,容量可查
创建切片
从数组创建切片:
a := [5]int{1, 2, 3, 4, 5}
s := a[1:4] // 包含索引 1 到 3 的元素 → [2,3,4]a[low : high] → 包含 low 索引,不包含 high 索引
切片长度和容量
len(s) // 切片长度cap(s) // 切片容量长度(len) → 切片中元素数量
容量(cap) → 从切片开始到底层数组末尾的元素数量
示例:
a := [5]int{1,2,3,4,5}
s := a[1:3]
fmt.Println(len(s)) // 2
fmt.Println(cap(s)) // 4 (从索引 1 到索引 4)创建空切片
var s []int // nil 切片
s = []int{} // 空切片,长度 0切片字面量
s := []int{1, 2, 3} // 不需要指定长度切片追加元素
s = append(s, 4, 5)append 返回新的切片
如果容量不足,Go 会分配新数组
遍历切片
for i, v := range s {
fmt.Println(i, v)
}切片共享底层数组
多个切片可以 共享同一数组:
a := [5]int{1,2,3,4,5}
s1 := a[1:4] // [2,3,4]
s2 := a[2:5] // [3,4,5]
s1[0] = 10
fmt.Println(a) // [1,10,3,4,5]⚠️ 修改切片元素会影响底层数组和其他共享切片。
切片的切片
切片可以继续切片:
s3 := s1[1:3] // 从 s1 中切出子切片子切片仍然共享原数组
可以继续用 append 扩容
nil 切片与空切片
var s []int → nil 切片s := []int{} → 空切片
两者长度为 0,但 nil 切片没有底层数组。
make 创建切片
s := make([]int, 5) // 长度 5,容量 5
s2 := make([]int, 3, 10) // 长度 3,容量 10make([]T, len, cap)
可预分配容量,提高性能
高级切片示例
s := []int{1,2,3}
s = append(s, 4,5,6...)
fmt.Println(s) // [1 2 3 4 5 6]... 表示展开切片元素
常用于拼接两个切片



评论