多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
> 可以理解为动态数组。切片是引用调用,传指针,访问和遍历与数组一致。slice的元素地址指向数组对应元素的地址。slice从底层来讲,是一个数据结构struct `var a []int//不确定长度的int类型切片` ``` package main import ( "fmt" ) func main() { var intArr [5]int = [...]int{1, 22, 33, 66, 99} slice := intArr[1:3] //引用1->3,不包含3     fmt.Println("slice的元素", slice)     fmt.Println("slice的元素个数", len(slice))     fmt.Println("slice的容量", cap(slice)) //切片的容量是可以动态变化的 for index, value := range slice {         fmt.Printf("下标是%v 值为%v\\n", index, value)     } } ``` ![](https://img.kancloud.cn/71/16/7116bd37257077d3e375c3cb336b84c4_232x109.png) > 切片的使用方式 1. 定义一个切片,让切片去引用一个创建好的数组。直接引用数组,数组事先存在,程序员是可见的 2. 通过make来创建切片 `var 切片名 []type([],len,[cap])` `var slice []int = make([]int,4,10)` type 数据类型 len 大小 cap 容量。由切片在底层进行维护,程序员不可见 3. 指定具体数组,原理类似make `var slice []int = []int {1,3,4}` ![](https://img.kancloud.cn/d0/e0/d0e0312faacee17cabe7d119d0ed4b5d_875x297.png) > 相关函数库builtin append:内建函数append将元素追加到切片的末尾。若它有足够的容量,其目标就会重新切片以容纳新的元素。否则,就会分配一个新的基本数组。append返回更新后的切片,因此必须存储追加后的结果。 ``` slice = append(slice,elem1,elem2) ``` ![](https://img.kancloud.cn/ac/63/ac638ee7e090fbaf2a506e84e6353719_1093x337.png) copy:内建函数copy将元素从来源切片复制到目标切片中,也能将字节从字符串复制到字节切片中。copy返回被复制的元素数量,它会是 len(src) 和 len(dst) 中较小的那个。来源和目标的底层内存可以重叠 copy(目标slice,来源slice) 目标slice长度小于来源slice,不报错 ![](https://img.kancloud.cn/72/07/72075897b707aad09b2140ac2c98b689_981x244.png)