片:就是变长数组,主要是因为数组(数组)长度不可变,导致在使用的时候存在诸多限制,才有了切片,切片主要包含3个部分:1、指针2,容量,3、长度,由于片的底层结构依然是数组,所以操作的时候,不是操作切片的数据,而实际是操作底层数组的数据,所以得有指向该数组的指针,长度则表示当前片的长度(非底层数组的长度),容量则表示从片起始位置到底层数组的结束位置,注意此处是位置差,即表示能存放多少个元素。
片的用法和数组类似,但申明时,不指定数组的长度,如var int[],片通过len (s),帽(s)查看年代的长度和容量
测试下:
<前> 主要 main () { ,,testArray =[] int {},,,,,,,,, ,,fmt.Println (testArray [:]) ,,fmt.Println (testArray (len (testArray))) ,,我,v:=testArray { ,,,,,fmt.Printf(我,v) ,,} ,,年代:=testArray [:] ,,i1, v1:={ ,,,,,fmt.Printf (i1, v1) ,,} ,,fmt.Printf(帽(s), len (s)) } 测试结果为: [0,1,2,3] 9 0,0 1,1 2,2 3,3 4,4 5,5 6,6 7,7 8,8 9,9 0,3 1,4 2,5 3,6 4,7 从而,s 帽# 39;s 7 从而,s len # 39; s 5 slice 倒序: package 主要 import “fmt" func main () { ,,var testArray int [10]=[10] int {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} ,,fmt.Println (testArray [0:4]) ,,fmt.Println (testArray len (testArray) [1]) ,,for 我,v:=range testArray { ,,,,,fmt.Printf (“% d % d \ n",我,v) ,,} ,,年代:=testArray(三) ,,for i1, v1:=range s { ,,,,,fmt.Printf (“% d % d \ n", i1, v1) ,,} ,,fmt.Printf (“, s 帽# 39;s % d \ nthe s len # 39; s % d \ n",帽子(s), len (s)) ,,//reserse 从而片 ,,fmt.Println (“before reserse “s) ,才能预定(s) ,,fmt.Println (“after reserse" s) } func 预定(s int []) { ,,for i, j:=0, len (s) 1; i检查片是否为空的两种方式,直接和零比较,还有一个是判断块长度为空
<前> testNil int [] testNil==nil { ,,fmt.Println () } len (testNil)=={ ,,fmt.Println () } 之前