切片
初始化一个切片
//初始化一个没有元素的整型切片
var a[]int =[]int{}
//make方式创建一个0长度的整型切片
a :=make([]int,0)
创建和查询切片
1 package main
2
3 import "fmt"
4
5 func main(){
6
7
8
9 //创建一个普通切片
10 var x =[10]int{1,2,3,4,5,6,7,8,9,10}
11
12 //这个是数组的切片 切出来的一部分内容。
13 // 切片的底层是一个数组
14 //切片 是顾头不顾尾
15
16 //x1 :=x[0:5] //含头不含尾
17 // x2 :=x[:5] //默认从开头截取
18 //x3 :=x[5:] //默认截到最后
19 x4 :=x[:] //从头到尾
20 fmt.Printf("x的类型是%T,数值是%v
",x,x) //x的类型是[10]int,数值是[1 2 3 4 5 6 7 8 9 10]
21 fmt.Printf("x4的类型是%T,数值是%v
",x4,x4) //x4的类型是[]int,数值是[1 2 3 4 5 6 7 8 9 10]
22
23
24
25
26 //也可以 对切片 进行 截取 切片的切片
27 xx4 := x4[5:7]
28 fmt.Println(xx4) //[6 7]
29
30
31
32
33 }
切片追加元素
1 package main
2
3 import "fmt"
4
5 func main(){
6
7 //初始化一个没有元素的整型切片
8 var a[]int =[]int{}
9
10 //查询当前切片的长度
11 fmt.Printf("切片长度是%d,数值是%v
",len(a),a) //切片长度是0,数值是[]
12
13
14
15
16 //切片内追加元素
17 a = append(a,0)
18 a = append(a,0,1,2,3,4,5,6)
19 fmt.Printf("切片长度是%d,数值是%v
",len(a),a) //切片长度是8,数值是[0 0 1 2 3 4 5 6]
20
21
22 //遍历查询01
23 for i:=0;i<len(a);i++{
24 fmt.Println(a[i])
25 }
26
27
28 //遍历查询02
29 for a,b := range a{
30 fmt.Printf("第%v个长度是%v
",a,b)
31 }
32
33 }
切片之间的合并
1 package main
2
3 import "fmt"
4
5 func main() {
6 var (
7 a1 = []int{1, 2, 3}
8 b2 = []int{4, 5, 6}
9 )
10
11
12 //兼并切片 利用for 循环进行追加内容
13 for _, values := range b2 {
14 a1 = append(a1, values)
15 }
16 fmt.Println(a1) //[1 2 3 4 5 6]
17
18
19
20 //粗暴方式 另外一种方式
21 a1 = append(a1, b2...)
22 fmt.Println(a1) //[1 2 3 4 5 6]
23
24
25
26
27 }
切片自动扩容的规律
1 /*
2 使用make([]int,len) 创建指定初始长度的切片,容量默认为0
3 使用make([]int,len,cap) 创建指定初始长度和容量的切片
4 后续的扩容策略依然是: 先翻一倍,在俩个俩个的递增。
5 */
6
7
8
9 package main
10
11 import "fmt"
12
13 func main() {
14
15
16
17 //make方式, 创建一个0长度的整型切片
18 a :=make([]int,0)
19 a2 :=make([]int,0,5)
20 a3 :=make([]int,3,5)
21
22 //len是长度,cap 是容量
23 fmt.Printf("切片的长度为%v,容量为%v
",len(a),cap(a)) //切片的长度为0,容量为0
24 fmt.Printf("切片的长度为%v,容量为%v
",len(a2),cap(a2)) //切片的长度为0,容量为5
25 fmt.Printf("切片的长度为%v,容量为%v
",len(a3),cap(a3)) //切片的长度为3,容量为5
26
27
28
29
30
31
32 }