Go圣经-slice
变量-常量-字面量
1 | a := 1 |
数组
- Go内置的函数**len()**可以返回数组的元素个数
- […]int “…”省略号出现在数组长度的位置,数组的长度就由初始化数组的元素个数决定
- [3]int与[4]int是不同的类型,并且 数组长度的位置必须是常量表达式
- […]int{99:-1},表示总共由一百个元素,第九十九个为-1,其他都为0
- [5]string{1: “ok”, 2: “o” } 这里的起始位置就是索引为1的地方
- 数组作为形参的时候,是另外创建一个副本,是值传递的形式,要与其他语言分开来
- 要实现地址传递,直接使用数组指针,*[9]int
slice
slice表示一个拥有相同类型原始的可变长度的类型
指针 长度 容量
长度和容量
切片的长度就是它所包含的元素个数。
切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。
切片可以按需自动增长和缩小,增长一般使用内置的 append 函数来实现,而缩小则是通过对切片再次进行切割来实现。
创建slice
1
2
3
4
5
6// 直接创建,并赋予字面量
a := []int{1,2,3}
// 使用make, 长度和容量可以忽略
a := make([]int)
a := make([]int,len)
a := make([]int,len,cap)截取符
1
2
3
4
5
6// 左闭右开形式
a := []int{1,2,3}
b := a[1:2] // b = [1]
c := a[1:] // c= [2,3]
d := a[:2] // d= [1,2]
e := a[:] // e= [1,2,3]append()
1
2
3
4
5a := make([]int,3)
a = append(a,1)
// 增加多个元素
slice = append(slice, 1, 2)
slice = append(slice,slice2)删除
1
2
3
4
5// 如果是两段的元素就直接使用[:]的方法截取
// 如果是中间的元素
var s = []int{1, 2, 3, 4}
s = append(s[:2], s[3:]...) // 三个点不能忘记
fmt.Println(s) // [1 2 4]修改
直接通过索引修改
查询
直接通过索引查询
copy()
1
2copy( destSlice, srcSlice []T) int
// 将 srcSlice 赋值到 destSlice中 ,如果加入的两个数组切片不一样大,就会按照其中较小的那个数组切片的元素个数进行复制。比较
slice是不能用== 来比较是否相同的,这与数组不同。
如果是[]byte 可以使用bytes.Equal来比较
else 其他类型的切片就用for range 比较吧
判断切片为空
1
2
3
4//正确
len(slice)= 0
//错误
slice = nil
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Echin の 博客!