1 package main
2
3 import "fmt"
4
5 func main() {
6 /*
7 切片Slice:
8 1.每一个切片引用了一个底层数组
9 2.切片本身不存储任何数据,都是这个底层数组存储,所以修改切片也就是修改这个数组中的数据
10 3.当向切片中添加数据时,如果没有超过容量,直接添加,如果超过容量,自动扩容(成倍增长)
11 4.切片一旦扩容,就是重新指向一个新的底层数组
12
13 s1:3--->6--->12--->24
14
15 s2:4--->8--->16--->32....
16
17 */
18 s1 := []int{1, 2, 3}
19 fmt.Println(s1) // [1 2 3]
20 fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:3,cap:3
21 fmt.Printf("%p\n", s1) // 0xc000012180
22
23 s1 = append(s1, 4, 5)
24 fmt.Println(s1) // [1 2 3 4 5]
25 fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:5,cap:6
26 fmt.Printf("%p\n", s1) // 0xc00000a270
27
28 s1 = append(s1, 6, 7, 8)
29 fmt.Println(s1) // [1 2 3 4 5 6 7 8]
30 fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:8,cap:12
31 fmt.Printf("%p\n", s1) // 0xc00001a0c0
32
33 s1 = append(s1, 9, 10)
34 fmt.Println(s1) // [1 2 3 4 5 6 7 8 9 10]
35 fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:10,cap:12
36 fmt.Printf("%p\n", s1) // 0xc00001a0c0
37
38 s1 = append(s1, 11, 12, 13, 14, 15)
39 fmt.Println(s1) // [1 2 3 4 5 6 7 8 9 10 11 12 13 14 15]
40 fmt.Printf("len:%d,cap:%d\n", len(s1), cap(s1)) // len:15,cap:24
41 fmt.Printf("%p\n", s1) // 0xc000108000
42 }