切片

切片的定义和使用

//切片的定义 方法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\n", 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>

posted @ 2021-03-08 20:36  慕欣安安  阅读(137)  评论(0编辑  收藏  举报