50_Go基础_1_17 slice-1

 1 package main
 2 
 3 import "fmt"
 4 
 5 func main() {
 6     /*
 7         数组array:
 8             存储一组相同数据类型的数据结构。
 9                 特点:定长
10 
11         切片slice:
12             同数组类似,也叫做变长数组或者动态数组。
13                 特点:变长
14 
15             是一个引用类型的容器,指向了一个底层数组。
16 
17         make()
18             func make(t Type, size ...IntegerType) Type
19 
20             第一个参数:类型
21                 slice,map,chan
22             第二个参数:长度len
23                 实际存储元素的数量
24             第三个参数:容量cap
25                 最多能够存储的元素的数量
26 
27 
28         append(),专门用于向切片的尾部追加元素
29             slice = append(slice, elem1, elem2)
30             slice = append(slice, anotherSlice...)
31     */
32 
33     // 1.数组
34     arr := [4]int{1, 2, 3, 4} // 定长
35     fmt.Println(arr)
36 
37     // 2.切片
38     var s1 []int
39     fmt.Println(s1) // []
40 
41     s2 := []int{1, 2, 3, 4}        // 变长
42     fmt.Println(s2)                // [1 2 3 4]
43     fmt.Printf("%T,%T\n", arr, s2) // [4]int,[]int
44 
45     s3 := make([]int, 3, 8)
46     fmt.Println(s3)                               // [0 0 0]
47     fmt.Printf("容量:%d,长度:%d\n", cap(s3), len(s3)) // 容量:8,长度:3
48     s3[0] = 1
49     s3[1] = 2
50     s3[2] = 3
51     fmt.Println(s3) // [1 2 3]
52     // fmt.Println(s3[3]) //panic: runtime error: index out of range
53 
54     // append()
55     s4 := make([]int, 0, 5)
56     fmt.Println(s4)                // []
57     s4 = append(s4, 1, 2)          //
58     fmt.Println(s4)                // [1 2]
59     s4 = append(s4, 3, 4, 5, 6, 7) //
60     fmt.Println(s4)                // [1 2 3 4 5 6 7]
61     s4 = append(s4, s3...)         //
62     fmt.Println(s4)                //  [1 2 3 4 5 6 7 1 2 3]
63 
64     // 遍历切片
65     for i := 0; i < len(s4); i++ {
66         fmt.Println(s4[i])
67     }
68 
69     for i, v := range s4 {
70         fmt.Printf("%d-->%d\n", i, v)
71     }
72 
73 }