slice切片聲明方式
1.定義切片方式,聲明slice1是一個切片,并且初始化,預設值為1,2,3,長度為3
2.聲明slice2是一個切片,但是并沒有給slice配置設定空間,長度為0,裡面沒有任何值
用make為slice2開辟一個長度為3的int型資料,值全部為0
給切片長度指派
3.将第二方式結合在一起,聲明slice1是一個切片,并開辟空間,3個空間,初始化值為0
var slice3[]int=make([]int,3)
slice3[0]=11
4.将第三種方式簡化一下,通過:=推到出slice是一個切片(最常用)
slice4:=make([]int,3)
slice4[0]=22
判斷一個slice是否為空
if slice1==nil{
fmt.Println("slice1 是一個空切片")
}else{
fmt.Println("slice1不是空切片")
}
slice切片的使用方式
1.切片容量的追加
//1.指定初始cap
//定義一個切片長度為3,容量為5的切片numbers
var numbers=make([]int,3,5)
fmt.Printf("len=%d,cap=%d,slice=%v\n",len(numbers),cap(numbers),numbers)
//向切片numbers追加一個值為1的元素,numbers len=4,cap=5,[0,0,0,1]
numbers=append(numbers,1)
//向切片numbers追加一個值為1的元素,numbers len=5,cap=5,[0,0,0,1,2]
numbers=append(numbers,2)
//此時cap容量已經滿了,切片會動态開辟初始容量那麼大的空間
//向切片numbers追加一個值為1的元素,numbers len=6,cap=10,[0,0,0,1,2,3]
numbers=append(numbers,3)
//2.沒有指定初始cap
var numbers1=make([]int,3)
//numbers len=3,cap=3,[0,0,0]
fmt.Printf("len=%d,cap=%d,slice=%v\n",len(numbers1),cap(numbers1),numbers1)
//numbers len=4,cap=6,[0,0,0,1]
numbers1=append(numbers1, 1)
fmt.Printf("len=%d,cap=%d,slice=%v\n",len(numbers1),cap(numbers1),numbers1)
2.切片容量的截取
func main() {
s:=[]int{1,2,3}
//s1=[1,2],這種方式s1和s指向同一個位址
s1:=s[0:2]
fmt.Println(s1)
//修改第一個值之後,切片s和s1都發生了改變
s1[0]=10
//s=[10,2,3]
fmt.Println(s)
//s=[10,2]
fmt.Println(s1)
s2:=make([]int,3)
//copy可以将底層數組的slice一起進行拷貝,重新開辟了存儲空間,深拷貝。此時修改切片裡面的值是不會兩個切片一起變的
copy(s2,s)
println(s2)
}