go的slice

167 阅读1分钟

slice翻译过来是切片的意思

你可以声明未指定大小的数组来定义切片

var variableName []type;

variableName是变量名,type是数组的类型

也就是这么写:

var arr []int

这样声明了一个arr的数组变量,且没有声明它的长度,因为arr是一个动态数组,是可以自动拓展的 或者你可以使用make来创建slice

var slice []int = make([]int, 5, 10)
print(slice)

func print(arr []int) {
    fmt.Println("arr的内容为:", arr, "长度为", len(arr), "容量为", cap(arr))
}

make后面跟三个参数make([]type,len,cap) type是类型 len是长度 cap是容量,也就是最大长度的意思 相当于这是提前初始化了数据 打印了上面的内容,我们发现

图片.png

提前都初始化后,初始变量为variable的初始值,如果是int就是0,string是空字符串,依次类推

切片也可以切,而且很方便

func main() {
    var slice []int = make([]int, 5, 10)
    slice2 := slice[1:3]
    print(slice2)
}

[startIndex,endIndex-1]

上面这个例子,相当于是索引1,2这两个值被切片了

如果只有单一个呢[startIndex:],如果是startIndex:这样的,那么就是从startIndex一直取到最后一个

如果只有单一个[:endIndex],如果是:endIndex这样的,就是从索引为0的位置取到endIndx-1的位置

有些同学可能学过python,知道一个[startIndex:endIndex:step]这样的,在python中,step叫做步长

但是在go里面,就没有这个步长的概念了,所以需要小心,但是go里面也能写这样的形式

比如[1:2:3]这样也不报错,但是很少用,而且没啥意义,这个可以看作是一种意外吧