在 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
}
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐