切片的定义和使用
//切片的定义 方法1 默认切片为空
var slice []int
//定义 方法2 自动推导类型
slice := []int{}
//切片的使用 增加
slice = append(slice,1,2,3)
//获取切片的长度
len(slice)
//遍历切片
for i:=0;i<len(slice);i++{
fmt.Println(slice[i])
}
//var slice []int 默认切片为空
//slice[0] = 123 erro 数组为空,赋值 数组越界
//slice = append(slice, 1, 2, 3)
//创建切片并制定切片元素的个数
//make(数据类型,个数)
slice :=make([]int,5)
fmt.Println(slice)
fmt.Println(len(slice))
slice[1] = 123
slice[2] = 666
//append在进行数据追加时 在末尾进行追加
slice = append(slice,9,10,11,12,13)
fmt.Println(slice)
fmt.Println(len(slice))
切片的长度和容量
slice:= make([]int,5)
fmt.Println(len(slice)) //长度为5
fmt.Println(cap(slice)) //容量为5
slice = append(slice, 1, 2, 3)
fmt.Println(len(slice)) //长度为8
fmt.Println(cap(slice)) //容量为10 //扩容为 上次的1倍 5*2 = 10
slice = append(slice, 4, 5, 6)
fmt.Println(len(slice)) //长度为11
fmt.Println(cap(slice)) //容量为20
fmt.Println(slice)
/* make([]数据类型,长度,容量) */
slice := make([]int,5,10)
案例:
var slice []int
for i:=0;i<10000;i++{
//容量每次扩容为上一次的倍数 如果超过1024 变为约等于上一次1/4大小
slice = append(slice, i)
if len(slice)==cap(slice){
fmt.Println(len(slice))
}
}
切片的截取
slice := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
//切片名本身就是一个地址 指向切片的首地址
fmt.Printf("%p
", slice)
/**** 切片的截取 *********/
1, [起始位置:结束位置] 前闭后开区间 [0:5)
s := slice[0:5]
2, [起始位置:] 截取从起始位置开始到切片结束
s := slice[2:]
3, [:结束位置] 从下标0开始到结束位置 不包含结束位置
s := slice[:6]
4, [:]全部截取
s := slice[:]
5, [起始位置:结束位置:最大值容量]
s := slice[2:5:6] //6-2=容量 ===>最大值容量 - 起始位置
/**** 切片的拷贝 *********/
s := make([]int, 10)
//copy(目标切片,源切片)
copy(s, slice)
1,值传递 形参不能修改实参的值</br> 2,地址传递 形参可以修改实参的值</br>