片:就是变长数组,主要是因为数组(数组)长度不可变,导致在使用的时候存在诸多限制,才有了切片,切片主要包含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 ()   }   之前