「这是我参与11月更文挑战的第2天,活动详情查看:2021最后一次更文挑战」
slice
slice 表示用于相同类型元素的可变长度的序列。
slice有三个属性:指针、长度和容量。
- 指针:slice存储数据的内部结构是数组,指针指向的是数组的地址
- 长度:保存slice中的元素数量
- 容量:slice中可容纳的元素数量,在像slice插入元素时,如果超过容量,会对slice进行扩容
slice的基本操作
1.初始化
1 | go复制代码// 方式一 通过字面量自己初始化 |
2.访问和更改
1 | go复制代码// 访问和数组一致,通过下标访问 |
3.增加
1 | go复制代码// 如果想对slice增加一个元素,使用append函数 |
append
函数会处理当当前slice对象的容量不足时,自动扩容(重新申请一块空间并将原来的元素复制过来)。我无法保证原始的slice和调用append后的结果slice执向同一个底层数组。也无法断定旧slice上对元素的操作会或者不会影响新的slice元素。 所以通常我们将append的调用结果再次赋值给传入append函数的slice。
4.删除
1 | go复制代码// 通过copy实现删除 |
5.翻转slice
1 | go复制代码func reverse(s []int) { |
6.比较
slice无法使用==
进行比较,只允许和nil
进行比较。如果想检查slice是否为空,使用len(s) == 0
。
1 | go复制代码var s []int // len(s) == 0, s == nil |
slice的用途
1.实现栈
栈的特点是先进后出
1 | go复制代码stack = []int{} |
本文转载自: 掘金