函数main () {   var arr=[…] int {0, 1, 2, 3, 4, 5, 6}   slice1:=arr[1:4:5]//{低:高:max}最多再扩张一个元素//max超出len (arr)//slice2:=arr[1:4:7]//恐慌   fmt.Println (slice1)//(1、2、3)   slice3:=slice1[1:3:4]//[2、3]大于4会恐慌   fmt.Println (slice3)   }      之前      

上面代码中创建了一个长度为7的数的arr组,同时创建一个基于数组arr的切片slice1,切片引用了数组的指数=1到指数=3之间的元素,同时也允许切片最大扩张1个元素大小的空间。如果这个扩张空间大于7那么程序就会恐慌。最后创建了一个基于slice1延申的一个切片slice2,它引用了切片的指数=1到指数=3之间的元素,由于slice1最大扩容1个元素,因此slice2也最多扩容一个元素,超过了会恐慌。

  

 Golang中的切片与数组及区别详解

  

,,,创建基于底层数组的片,其帽取值在:len<=cap<=len (arr)之间

  

,,,创建基于一个切片的片,其帽取值在:len (slice1) & lt;=cap<=帽(slice1)之间

  

<强>,,3.片使用使创建

        函数main () {   var片=使(int [] 3 5)//len=3,帽=5   fmt.Println(片)//(0,0,0)   slice2:=片(5)://片实现了对切片的扩容,切片长度变为5   fmt.Println (slice2)//(0, 0, 0, 0, 0)   }      

, <强> 4。切片作为参数传递

        函数main () {   var片=使(int [] 3 5)//len=3,帽=5   fmt.Println(片)//(0,0,0)   slice2:=片(5)://片实现了对切片的扩容,切片长度变为5   fmt.Println (slice2)//(0, 0, 0, 0, 0)   片[0]=999//这里片和切片的指数=0位置都是999年因为他们引用的底层数组的指数=0位置都是999   fmt.Println(片)   fmt.Println (slice2)   AddOne(片)//(8888,0,0)   fmt.Println(片)//(8888,0,0)   fmt.Println (slice2)//(8888, 0, 0, 0)   }   func AddOne (int []) {   s [0]=8888   fmt.Println (s)   }      之前      

因为切片是个引用类型,所以它作为参数传递给函数,函数操作的实质是底层数组

  

        函数main () {   var arr=[…] int {1, 2, 3, 4}   fmt.Println (arr)//(1、2、3、4)   片:=arr [:]   fmt.Println(片)//(1、2、3、4)   片=append(片、int[]{5 6 7}…)//此时切片的引用地址已经发生改变了,它引用的底层数组再也不是加勒比海盗了,而是一个新的数组newarr [1, 2, 3, 4, 5, 6, 7]   fmt.Println(片)//[1,2,3,4,5,6,7]//验证片引用的地址已经发生改变   片[0]=666   fmt.Println (arr)//(1、2、3、4)   fmt.Println(片)//[666年2、3、4、5、6、7)   }