📅  最后修改于: 2023-12-03 15:01:03.495000             🧑  作者: Mango
在GO语言中,切片就是对数组的一个片段的引用。切片不存储数据,而是引用了底层数组的值。对切片进行的任何修改都会反映在底层数组中。切片类型的语法和数组类型非常类似,只是没有固定长度。
切片的定义如下所示:
var identifier []type
其中,identifier 表示的是切片的名称,type 表示的是切片所引用的值的数据类型。
比如,一个字符串类型的切片定义如下:
var strSlice []string
除了定义切片之外,还可以使用 make() 函数创建切片。make() 函数的语法如下:
make([]T, length, capacity)
其中,T 表示数据类型,length 表示切片的长度,capacity 表示切片的容量。
比如,创建一个长度为 3,容量为 5 的整型切片,可以使用如下代码:
slice := make([]int, 3, 5)
切片提供了一些操作函数,可以对切片进行修改、追加、拷贝等操作。
使用 append() 函数可以向切片中添加元素。append() 函数的语法如下:
append(s []T, x ...T) []T
其中,s 表示要添加元素的切片,x 表示要添加的元素(可以同时添加多个元素)。
比如,向一个切片中添加一个整数和一个字符串的代码如下:
var s []interface{}
s = append(s, 1, "hello")
可以使用 Go 语言的内建函数 append() 删除切片中指定的元素,不过需要多一个步骤:先将要删除的元素先提取出来,然后用切片的“[:i]"和"[i+1:]"两个截取操作子切片拼接在一起。代码如下:
func remove(slice []int, elem int) []int {
for i := range slice {
if slice[i] == elem {
slice = append(slice[:i], slice[i+1:]...)
break
}
}
return slice
}
可以通过切片的“[i:j]”操作获取一个切片的子切片。其中 i 和 j 代表的是切片中元素的下标。i 表示的是子切片的起始位置,j 表示的是子切片的结束位置(不包括 j 所对应元素本身)。
比如,获取一个整型切片的前三个元素的代码如下:
a := []int{1, 2, 3, 4, 5}
b := a[0:3]
切片提供了一种便捷的方式来管理动态数组。切片让动态数组的使用变得更加简单、直观、安全。