切片,是一组可变长度的、同类元素的集合

与数组相比切片的长度是不固定的。切片可以追加元素,在追加元素时可能使切片的容量增大。

切片的声明

切片在使用前必须初始化,未初始化的切片的值为nil

var slice []int

fmt.Println(slice == nil)  // nil

切片的初始化

使用make()对切片初始化

// 初始化一个长度为3,容量为5的切片
// 第三个参数容量,可以不指定
var slice = make([]int, 3, 5)

// 打印切片、长度、容量
fmt.Println(slice, len(slice), cap(slice))

也可以直接赋值来初始化

var slice = []int{1, 2, 3} // 直接赋值

除了上面两个方法初始化切片以外,还可以通过对数组进行截取,也就是切片

var a = []int{4, 5, 6, 7, 8}
//对数组a进行切片,从第2个元素到第4个元素,不含第4个元素
var slice = a[1:3]  // [5, 6]

切片的赋值

除了上面介绍的在初始化时直接赋值外,还可以通过索引进行赋值

var slice = make([]int, 3, 5)
// 对第2个元素赋值,切片的索引和数组一样,从0开始
slice[1] = 100

fmt.Println(slice[1]) // 100

切片的追加

使用append()对切片追加元素

var slice []int
// 向切片追加一个元素200
slice = append(slice, 200)
// 批量追加
slice = append(slice, 300, 400, 500)

// 向切片追加另一个切片
slice1 := []int{600, 700, 800}
// ...就是将切片的元素转换成多个参数传入
slice = append(slice, slice1...) 

fmt.Println(slice) // [200 300 400 500 600 700 800]

对切片进行切片

对切片进行切片也就是对切片的截取,和对数组进行切片一样

var slice = []int{1, 2, 3, 4, 5}

// 从第2个元素截取到第4个元素,不含第4个元素
fmt.Println(slice[1:3]) // [2 3]

对切片的遍历

对切片的遍历通常有两种,一种是for循环,另外一种是for range进行遍历

var slice = []int{1, 2, 3, 4, 5}
// for 循环遍历
for i := 0; i < len(slice); i++ {
    fmt.Println(slice[i])
}

// range 返回两个参数:索引和元素值
for i, v := range slice {
    fmt.Println(i, v)
}