在 Go 语言中,append 函数用于向切片(slice)追加元素。它是内建的函数,用于在切片的末尾添加一个或多个元素
,并返回新的切片。
append 函数的基本语法如下:
newSlice := append(slice, element1, element2, ...)
其中:
slice:要追加元素的切片。
element1, element2, …:要追加到切片的元素。
append 函数可以追加一个或多个元素到切片中。如果追加的元素超过了切片的容量,append 函数会自动分配更大的底层数组来容纳新的元素。
以下是一些关于 append 函数的重要特点和注意事项:
append 函数返回一个新的切片,而不会修改原始的切片。因此,通常需要将返回的新切片赋值给原始切片。
如果原始切片的容量足够,append 函数将直接向原始切片追加元素。这种情况下,新切片和原始切片将共享相同的底层数组。
如果原始切片的容量不足,append 函数将创建一个新的底层数组,并将原始切片的元素复制到新数组中,然后再追加新的元素。这种情况下,新切片将使用新的底层数组。
当使用 append 函数追加切片到另一个切片时,可以使用 … 语法将切片打散为单独的元素。例如:newSlice := append(slice1, slice2…)。
append 函数还可以用于创建一个新的切片,而不需要给定初始切片。例如:newSlice := append([]int{}, 1, 2, 3)。
下面是一些使用 append 函数的示例:
func main() {
slice := []int{1, 2, 3}
// 向切片追加一个元素
newSlice := append(slice, 4)
fmt.Println(newSlice) // 输出: [1 2 3 4]
// 向切片追加多个元素
anotherSlice := append(slice, 4, 5, 6)
fmt.Println(anotherSlice) // 输出: [1 2 3 4 5 6]
// 将一个切片追加到另一个切片
slice2 := []int{4, 5, 6}
combinedSlice := append(slice, slice2...)
fmt.Println(combinedSlice) // 输出: [1 2 3 4 5 6]
}
在上述示例中,我们演示了使用 append 函数向切片追加元素。第一个示例追加了一个元素到切片 slice 中,创建了一个新的切片 newSlice。第二个示例追加了多个元素到切片 slice 中,创建了另一个新的切片 anotherSlice。第三个示例将一个切片 slice2 追加到切片 slice 的末尾,创建了一个合并后的切片 combinedSlice。
从上面可以看到,切片使用append在末尾插入,但是没有insert这样方法在指定位置插入,需要执行如下几步:
package main
import "fmt"
func main() {
a := []int{1, 2, 3, 4, 5}
a = append(a, 0) //先把切片长度+1
fmt.Println(a)
index := 2 //需要插入的位置
copy(a[index+1:], a[index:])
fmt.Println(a)
a[index] = 100
fmt.Println(a)
}
输出为:
[1 2 3 4 5 0]
[1 2 3 3 4 5]
[1 2 100 3 4 5]
也可以通过自定义insert函数:
package main
import "fmt"
func main() {
slice := []int{1, 2, 3, 4, 5}
index := 2
value := 99
newSlice := insertSlice(slice, index, value)
fmt.Println(newSlice) // 输出: [1 2 99 3 4 5]
}
func insertSlice(slice []int, index int, value int) []int {
// 创建一个新的切片,长度比原切片多1
newSlice := make([]int, len(slice)+1)
// 将原切片的前半部分复制到新切片
copy(newSlice[:index], slice[:index])
// 在指定位置插入元素
newSlice[index] = value
// 将原切片的后半部分复制到新切片
copy(newSlice[index+1:], slice[index:])
return newSlice
}