Go 切片
约 305 个字 42 行代码 预计阅读时间 2 分钟
创建
元素类型为 T
的切片:
切片可包含任何类型,甚至其他切片。
零值为nil
。
若以没有长度的数组的形式定义一个变量,则会创建对应的数组,然后构建引用它的切片。
| make([]切片数据类型, 长度, (可选)容量)
// eg.
make([]int, 5)
make([]int, 0, 5)
|
分配一个元素为零值的数组,并返回一个运用了它的切片。
确定
通过两个下标(上界和下界)确定:a[low, high]
,包括下界,不包括上界。
| var a[10]int
//以下切片等价
a[0:10]
a[:10]
a[0:]
a[:]
|
下界默认值为 0
,上界默认值为切片长度。
属于对数组的引用
更改切片内元素会更改对应数组的对应元素,共享底层数组的切片也会受影响。
长度
切片包含的元素个数:
容量
从切片第一个元素起,到其底层数组的元素末尾的个数:
扩展
若舍弃后面的值,可以通过重新切片来扩展:
| s := []int{2, 3, 5, 7, 11, 13} // len=6 cap=6 [2 3 5 7 11 13]
s = s[:0] // len=0 cap=6 []
s = s[:4] // len=4 cap=6 [2 3 5 7]
s = s[2:] // len=2 cap=4 [5 7]
|
nil
切片的长度和容量
nil
切片的长度和容量为 0
,无底层数组。
向切片追加元素
追加到原切片末尾:
| append(元素类型为T的切片, 元素,元素, ...)
// eg.
append(s, 0)
append(s, 2, 3, 4)
append(s, a...)
|
返回包含原切片所有元素加上新添加元素的切片。以长度为准。
练习
| package main
import (
"golang.org/x/tour/pic"
"math"
)
func Pic(dx, dy int) [][]uint8 {
pic := make([][]uint8, dy)
for y := range pic {
pic[y] = make([]uint8, dx)
for x := range pic[y] {
pic[y][x] = uint8(float64(x) * math.Log(float64(y)))
}
}
return pic
}
func main() {
pic.Show(Pic)
}
|
来源
https://tour.go-zh.org/moretypes/18