go学习笔记(8)复合类型(2)切片(1)

今天来梳理一下切片。

在go语言中,基本上任何需要保存一连串数据的地方都可以用切片。切片没有长度的限制。

切片与数组的操作相似。一对方括号加上类型就能定义一个切片了,看起来就像是在定义数组时没有写数组大小。

1
var x = []int{1, 2, 3}

指定某几个元素值,没指定的会置为零值:

1
var x = []int{1, 4: 5, 9: 10}

上述代码定义了一个大小为10的切片,其值为:[1 0 0 0 5 0 0 0 0 10]

定义切片的切片:

1
var x [][]int

使用方括号读写切片中的值:

1
2
x[0] = 123
fmt.Println(x[1])

如果定义切片时没有指定切片的内容,那这个切片会被置为切片的零值 nil

1
var x []int

在 go 语言中 nil 与其他语言的 null 类似,但也有一点点不同。nil 没有类型,也不是关键字或保留字。

切片是不能比较的,但它可以与 nil 进行比较:

1
2
fmt.Println(x == nil)
// 打印:true

go 语言几个内置的用于切片处理的函数:

len

使用 len 可以获取切片的长度。

1
2
3
var x = []int{1, 2, 3}
fmt.Println(len(x))
// 打印:[3]

append

使用 append 可以向切片追加元素:

1
2
3
4
var x []int
x = append(x, 123)
fmt.Println(x)
// 打印:[123]

append 至少要两个输入,一个切片,以及一个与该切片同类型的值。它会返回一个新的切片。
可以一次追加多个元素:

1
2
3
4
var x = []int{1, 2}
x = append(x, 3, 4, 5, 6)
fmt.Println(x)
// 打印:[1 2 3 4 5 6]

通过...操作符,一个切片可以被展开追加到加一个切片上:

1
2
3
4
5
var x = []int{7, 8, 9}
var y = []int{1, 2, 3}
x = append(x, y...)
fmt.Println(x)
// 打印:[7 8 9 1 2 3]

江达小记