1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
package main
import "fmt"
func main() {
// 1. 切片声明和初始化
var slice1 []int // 声明切片,零值为nil
slice2 := []int{1, 2, 3, 4, 5} // 声明并初始化
slice3 := make([]int, 5) // 使用make创建长度为5的切片
slice4 := make([]int, 3, 10) // 长度为3,容量为10的切片
fmt.Printf("slice1: %v, len: %d, cap: %d, nil: %t\n",
slice1, len(slice1), cap(slice1), slice1 == nil)
fmt.Printf("slice2: %v, len: %d, cap: %d\n",
slice2, len(slice2), cap(slice2))
fmt.Printf("slice3: %v, len: %d, cap: %d\n",
slice3, len(slice3), cap(slice3))
fmt.Printf("slice4: %v, len: %d, cap: %d\n",
slice4, len(slice4), cap(slice4))
// 2. 从数组创建切片
arr := [5]int{10, 20, 30, 40, 50}
slice5 := arr[1:4] // 从索引1到3(不包括4)
slice6 := arr[:3] // 从开始到索引2
slice7 := arr[2:] // 从索引2到结束
slice8 := arr[:] // 整个数组
fmt.Printf("原数组: %v\n", arr)
fmt.Printf("slice5 [1:4]: %v\n", slice5)
fmt.Printf("slice6 [:3]: %v\n", slice6)
fmt.Printf("slice7 [2:]: %v\n", slice7)
fmt.Printf("slice8 [:]: %v\n", slice8)
// 3. 切片操作
// append - 添加元素
slice2 = append(slice2, 6, 7, 8)
fmt.Printf("append后: %v, len: %d, cap: %d\n",
slice2, len(slice2), cap(slice2))
// copy - 复制切片
slice9 := make([]int, len(slice2))
copy(slice9, slice2)
fmt.Printf("复制的切片: %v\n", slice9)
// 4. 切片的切片
subSlice := slice2[2:5]
fmt.Printf("子切片 [2:5]: %v\n", subSlice)
// 修改子切片会影响原切片(共享底层数组)
subSlice[0] = 999
fmt.Printf("修改子切片后,原切片: %v\n", slice2)
}
|