切片是一个拥有相同类型元素的可变长度的序列.是基于数组类型做的一层封装
有两种创建方式:
语法:
arry := []
slice1:= arry[startIndex:endIndex]
number := []int{1, 3, 7, 2, 5}
slice1 := number[1:3]
fmt.Println(slice1) --- [3 7]
如果startIndex
为空则从第一个元素开始
number := []int{1, 3, 7, 2, 5}
slice1 := number[:3]
fmt.Println(slice1) --- [1 3 7]
如果endIndex
为空则直到最后一个元素3
number := []int{1, 3, 7, 2, 5}
slice1 := number[3:]
fmt.Println(slice1) --- [2 5]
语法:
slice1 := make([]T, length, capacity)
T 为类型
length 为大小/容量
// 创建容量为5,数量为2的int切片数组
slice1 := make([]int, 2, 5)
// 初始化会放入两位为0的值
fmt.Println(slice1) --- [0 0]
Slice
是具有索引的,len()
是获取切片的长度,cap()
是获取切片的容量
// 创建容量为5,数量为2的int切片数组
slice1 := make([]int, 2, 5)
// 分别打印长度、容量、内容
fmt.Printf("len=%d cap=%d slice=%v\n", len(slice1), cap(slice1), slice1)
len=2 cap=5 slice=[0 0]
问题:无法向容量为0的切片中添加元素
// 创建一个容量为0的切片
slice1 := make([]int, 0)
// 向切片中放数据,下标越界
//slice1[0] = 10
// len=0 cap=0 slice=[]
printSlice(slice1)
// 定义一个打印切片信息的函数 打印内容包括长度、容量、元素内容
func printSlice(s []int) {
fmt.Printf("len=%d cap=%d slice=%v\n", len(s), cap(s), s)
}
利用append()
函数追加元素
// 创建一个容量为0的切片
slice1 := make([]int, 0)
// 向切片中放数据,下标越界
//slice1[0] = 10
printSlice(slice1)
// 利用 append() 函数追加元素
slice1 = append(slice1, 1, 2, 3)
// len=3 cap=3 slice=[1 2 3]
printSlice(slice1)
复制切片元素至另一个切片
// 创建一个大小容量一样的切片, 将数据复制到新的切片中
slice2 := make([]int, len(slice1), cap(slice1))
copy(slice2, slice1)
printSlice(slice2)
切片基于数组,在内存中修改了数组中的数据,切片数据也会随之改变
number := []int{1, 3, 7, 2, 5}
fmt.Println(number)
slice1 := number[:3]
printSlice(slice1)
number[0] = 9
fmt.Println(number)
printSlice(slice1)
[1 3 7 2 5]
len=3 cap=5 slice=[1 3 7]
[9 3 7 2 5]
len=3 cap=5 slice=[9 3 7]