📜  GO语言 切片(1)

📅  最后修改于: 2023-12-03 15:01:03.495000             🧑  作者: Mango

GO语言 切片介绍

什么是切片?

在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]
总结

切片提供了一种便捷的方式来管理动态数组。切片让动态数组的使用变得更加简单、直观、安全。