package main import "fmt" func main() { // 切片创建 s1 := []int{1, 2, 3} // 直接初始化 s2 := make([]int, 3, 5) // make创建,长度3,容量5 s3 := make([]int, 3) // 容量默认等于长度 fmt.Printf("s1: %v, len=%d, cap=%d\n", s1, len(s1), cap(s1)) // [1 2 3] 3 3 fmt.Printf("s2: %v, len=%d, cap=%d\n", s2, len(s2), cap(s2)) // [0 0 0] 3 5 fmt.Printf("s3: %v, len=%d, cap=%d\n", s3, len(s3), cap(s3)) // [0 0 0] 3 3 // 切片操作 s4 := s1[1:3] // 切片表达式,从索引1到3(不包含3) fmt.Println("s4:", s4) // [2 3] // 修改切片元素(影响底层数组) s4[0] = 20 fmt.Println("修改后s1:", s1) // [1 20 3] fmt.Println("修改后s4:", s4) // [20 3] // 切片追加元素 s2 = append(s2, 400) // len=4 == cap=5 → 不扩容 fmt.Printf("添加400后s2: %v, len=%d, cap=%d\n", s2, len(s2), cap(s2)) // [0 0 0 400] 4 5 s2 = append(s2, 500) // len=5 == cap=5 → 不扩容 fmt.Printf("添加500后s2: %v, len=%d, cap=%d\n", s2, len(s2), cap(s2)) // [0 0 0 400 500] 5 5 s2 = append(s2, 600) // len=6 > cap=5 → 扩容(容量变为10) fmt.Printf("添加600后s2: %v, len=%d, cap=%d\n", s2, len(s2), cap(s2)) // [0 0 0 400 500 600] 6 10 // 复制切片 dst := make([]int, 2) src := []int{10, 20, 30} copied := copy(dst, src) // 复制2个元素(取len(dst)和len(src)的最小值) fmt.Printf("复制后dst: %v, 复制数量: %d\n", dst, copied) // [10 20] 2 }