| 12345678910111213141516171819202122232425262728293031 |
- 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)
- }
|