介绍一下Go语言的切片
(一)切片产生背景
数组大小限定长度限定并且不可以进行扩容,在固定的条件下非常局限 切片可以实现对数组的动态切割,可以进行切割、裁剪
(二)切片的定义
(1)使用未知长度的数组
var 切片名 []切片类型
例如: // 定义一个数组 atemp := [11]int{1, 2, 3, 4, 5, 6, 9, 8, 7, 0} // 声明切片,并初始化 var a []int = atemp[:] a1 := atemp[3:] a2 := atemp[:6]
(2)使用make进行初始化
make类似于new的作用,但是又有一些不同: new(T) 为每个新的类型T分配一片内存,初始化为 0 并且返回类型为*T的内存地址:这种方法 返回一个指向类型为 T,值为 0 的地址的指针,它适用于值类型如数组和结构体;它相当于 &T{}。 make(T) 返回一个类型为 T 的初始值,它只适用于3种内建的引用类型:切片、map 和 channel 初始化方法: a:=make(参数1,参数2,参数3) 参数1:切片类型 参数2:切片长度 参数3:切片的容量 判断一个切片是否满了可以用len()测试切片长度、cap()测试切片容量 如果切片内的容量满了切片会进行加倍扩容,每次扩大后的容量是原来的两倍 切片有容量与长度这一概念与数组有本质的区别
初始化切片并进行扩容(扩容是自动的) b := make([]int, 3, 5) //append函数参数第一个是目标切片,后来的是加入的参数列表 //下例将1,2,3加入切片内(加入三次) b = append(b, 1, 2, 3) b = append(b, 1, 2, 3) b = append(b, 1, 2, 3)
(三)空切片初始值为nil
空切片声明方式: var a[]int