切片 Slice
[]T 动态长度、make/append/copy、len/cap、切片截取 [low:high]
切片 Slice
Slice 是 Go 最重要的数据结构。 它是数组的"视图"——动态长度、共享底层数组、高效传递。
学完本章你将: 掌握 []T、make/append/copy、len/cap、切片截取 [low:high]。
创建切片
go
package main
import "fmt"
func main() {
// 直接声明
s1 := []int{1, 2, 3, 4, 5}
// make 创建(指定长度和容量)
s2 := make([]int, 3) // len=3, cap=3, [0 0 0]
s3 := make([]int, 3, 10) // len=3, cap=10
// 从数组/切片截取
arr := [5]int{1, 2, 3, 4, 5}
s4 := arr[1:4] // [2 3 4](索引 1 到 3)
s5 := arr[:3] // [1 2 3]
s6 := arr[2:] // [3 4 5]
fmt.Println(s1, s2, s3, s4, s5, s6)
}
append / copy
go
s := []int{1, 2, 3}
// append —— 追加元素(可能触发扩容)
s = append(s, 4, 5) // [1 2 3 4 5]
s = append(s, []int{6, 7}...) // 追加另一个切片(... 展开)
// copy —— 复制元素
src := []int{1, 2, 3}
dst := make([]int, len(src))
copy(dst, src)
len vs cap
go
s := make([]int, 3, 10)
fmt.Println(len(s)) // 3(切片中的元素数)
fmt.Println(cap(s)) // 10(底层数组的容量)
// 当 append 超出 cap 时,Go 会自动分配更大的底层数组
💡 核心概念: 切片由三部分组成——
ptr(指向底层数组)、len(当前长度)、cap(容量)。传给函数时只拷贝这个三元组(24 字节),不拷贝数据。