切片概念
切片是对数组的一个连续片段的引用,所以切片是一个引用类型,这个片段可以是整个数组,也可以是由起始和终止索引标识的一些项的子集,需要注意的是,终止索引标识的项不包括在切片内。
切片的使用方法
切片如何声明
func creatSlice(){//声明创建切片函数
//切片 []Type 数组[number]Type
//声明整型切片
var numberList []int
fmt.Println(numberList)
//方法2 声明一个空的切片
var numberListEmpty = [] int {}//编译器会提示你让你用方法一去声明
fmt.Println(numberListEmpty)
//方法3 make声明方式 make([]Type,size,cap)
numbList:=make([]int,3,5)
fmt.Println(numbList)
//指针:是指向第一个切片元素的对应的底层数组元素的地址(切片的第一个元素不一定是数组中的第一个元素)
//长度:切片中的元素个数
//容量:从切片的开始位置到底层数据的结尾位置
arr:=[5]string{"我的","名字","叫","-HH-","啊"}
var s1 = arr[1:4]//这里的的数字是数组的下标,不过切片取得时候是左闭右开的
fmt.Println(arr)
fmt.Println(s1)
}
获取切片的元素及长度
func sliceLenAndCap(){//声明一个新的函数来体验如何获取一个切片的长度和容量
s := make([]int,3,5)
fmt.Println(len(s))
fmt.Println(cap(s))
}
查看切片的类型和判断切片是否为空
func checkSliceIsNull() {
var list [] int
fmt.Println(list ==nil)
//表明切片为引用类型
fmt.Println(len(list)==0)
//判断一个切片是否为空通过len函数来实现
}
验证切片的改变是否会改变原有数组
func modifySlice() {
var arr = []string{"我的","名字","叫","-HH-","啊"}
s := arr[:]
fmt.Println(arr)
fmt.Println(s)
s[0] = "你der"
fmt.Println(arr)
fmt.Println(s)
//你对切片的更改也会对数组进行改变
}
切片的扩容
func addSliceData() {//切片添加函数的声明
s := []string{"我的"}
s =append(s,"名字")
s =append(s,"叫")
s =append(s,[]string{"-HH-","啊"}...)
fmt.Println(s)
//通过fmt.Println(cap(s))可以发现你每次扩容都会导致容器的大小增加且是每一次是前次一个容器大小的2倍,所以不要扩容太多次
}
func main() {
creatSlice()
sliceLenAndCap()
addSliceData()
}
总结
切片相对于数组来说更加的灵活,仅仅取出我需要的段落。不需要的不取出,类似于这样。具体的就需要以后的学习来体会了。