简介
切片是相同类型元素的可变长度的集合,通常表示为[]type。同一切片中的元素类型都是同一个type的,它看上去很像数组,但没有长度。切片的底层都有一个数组。
组成
每个切片都由三部分组成:
- 指向底层数组中某个元素的指针:指向数组的第一个从切片访问的元素,这个元素并不一定是数组的第一个元素。一个底层数组可以对应多个切片,这些切片可以引用数组的任何位置,并且彼此之间的元素可以重叠。
- 长度(length/len):切片中的元素个数。
- 容量(capacity/cap):为切片分配的存储空间。
切片类型的初始化值是nil,没有对应的底层数组,并且长度和容量都是0。所以切片只能和nil比较。如果想检查切片是否为空,则可以使用len(s) == 0来判断。
创建切片
创建切片的方式有三种:基于数组创建,直接创建,使用内置函数make创建切片。
基于数组创建
举例:
package main import "fmt" func main() { var drinks = [5]string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"} var drinkSlice []string = drinks[0:3] fmt.Println(drinkSlice) }
说明:
①创建一个string类型的数组。
②基于数组创建一个切片。
Go语言支持以drinks[开始:结束]这样的方式基于数组生成一个切片。
比如上面程序的打印结果就是
[矿泉水 绿茶 冰红茶]
如果想提取数组的2-4个元素,则可以将其实索引指定为1,将终止索引指定为4。
Go语言的切片原则是“左含右不含”,比如上面的drinks[0:3],就包含了数组索引值为0到2的三个元素,并没有包含索引值为3的元素(可乐)。
注:如果想指定从哪个元素开始直接打印完后面的所有元素,则可以省略结束,比如[2:]
直接创建
packagemainimport"fmt"funcmain() { vardrinkSlice= []string{"矿泉水", "绿茶", "冰红茶", "可乐", "芬达"} fmt.Println(drinkSlice) }
使用内置函数创建
make语法:
make([]type,len)
make([]type,len,cap)
drinkSlice1 :=make([]string,6) drinkSlice2 :=make([]string,6,8)
drinkSlice1和 drinkSlice2的长度都是6,他们的容量分别是6和8。