package main import "fmt" func main() { // 1) 创建一个长度、容量都为 3 的切片 s := make([]int, 3, 3) fmt.Printf("初始: len=%d cap=%d ptr=%p %p\n", len(s), cap(s), s, &s) // 2) 再追加 3 个元素,刚好填满底层数组 s = append(s, 4, 5, 6) fmt.Printf("填满: len=%d cap=%d ptr=%p\n", len(s), cap(s), s) // 3) 再追加 1 个元素,触发扩容 // 在 Go1.18+ 的扩容策略中,当元素数量 ≤ 256 时,容量直接翻倍 s = append(s, 7) fmt.Printf("扩容: len=%d cap=%d ptr=%p\n", len(s), cap(s), s) // 4) 继续追加,观察下一次扩容 for i := 8; i <= 20; i++ { s = append(s, i) } fmt.Printf("再扩: len=%d cap=%d ptr=%p\n", len(s), cap(s), s) // 5) 共享底层数组示例 a := []int{10, 20, 30, 40} b := a[1:3] // b 与 a 共享底层数组 fmt.Printf("共享前 a=%v b=%v\n", a, b) b[0] = 99 fmt.Printf("共享后 a=%v b=%v (修改 b[0] 影响 a)\n", a, b) }