天天看點

go語言——slice切片

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)
}