今天来梳理一下切片。
在go语言中,基本上任何需要保存一连串数据的地方都可以用切片。切片没有长度的限制。
切片与数组的操作相似。一对方括号加上类型就能定义一个切片了,看起来就像是在定义数组时没有写数组大小。
var x = []int{1, 2, 3}
指定某几个元素值,没指定的会置为零值:
var x = []int{1, 4: 5, 9: 10}
上述代码定义了一个大小为10的切片,其值为:[1 0 0 0 5 0 0 0 0 10]
定义切片的切片:
var x [][]int
使用方括号读写切片中的值:
x[0] = 123
fmt.Println(x[1])
如果定义切片时没有指定切片的内容,那这个切片会被置为切片的零值 nil
。
var x []int
在 go 语言中 nil
与其他语言的 null
类似,但也有一点点不同。nil
没有类型,也不是关键字或保留字。
切片是不能比较的,但它可以与 nil
进行比较:
fmt.Println(x == nil)
// 打印:true
go 语言几个内置的用于切片处理的函数:
len
使用 len
可以获取切片的长度。
var x = []int{1, 2, 3}
fmt.Println(len(x))
// 打印:[3]
append
使用 append
可以向切片追加元素:
var x []int
x = append(x, 123)
fmt.Println(x)
// 打印:[123]
append
至少要两个输入,一个切片,以及一个与该切片同类型的值。它会返回一个新的切片。
可以一次追加多个元素:
var x = []int{1, 2}
x = append(x, 3, 4, 5, 6)
fmt.Println(x)
// 打印:[1 2 3 4 5 6]
通过...
操作符,一个切片可以被展开追加到加一个切片上:
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]
欢迎关注我的微信公众号 江达小记