ZetCode

Go append 函数

最后修改时间 2024 年 4 月 11 日

Go append 函数教程描述了 append 函数以及如何使用它。

append 是一个内置函数,用于将元素追加到切片的末尾。如有必要,会自动为新元素分配额外的空间。

append 函数返回更新后的切片。因此,有必要将 append 的结果存储起来,通常存储在持有切片本身的变量中。

Go append 简单示例

append 是一个可变参数函数;它可以接受可变数量的参数。

main.go
package main

import "fmt"

func main() {

    vals := []int{}
    vals = append(vals, 1)
    vals = append(vals, 2, 3)
    vals = append(vals, 4, 5, 6)
    vals = append(vals, 7, 8, 9, 10)

    fmt.Println(vals)
}

在本例中,我们创建了一个整数切片。我们从一个空切片开始。然后我们继续使用 append 添加新元素。

vals = append(vals, 1)
vals = append(vals, 2, 3)

可以将一个或多个元素添加到切片中。该函数创建一个新的更新后的切片,然后将其重新赋值给 vals 变量。

$ go run main.go
[1 2 3 4 5 6 7 8 9 10]

Go append 切片

我们可以将另一个切片追加到另一个切片。

main.go
package main

import "fmt"

func main() {

    vals := []int{1, 2, 3}
    res := []int{-1, 0}

    res = append(res, vals...)
    fmt.Println(res)
}

在本例中,我们将 vals 的值追加到 res

res = append(res, vals...)

我们使用了省略号运算符。... 会解包 vals 切片的值。

$ go run main.go
[-1 0 1 2 3]

Go append 字节

append 函数还允许追加字节值。

main.go
package main

import "fmt"

func main() {

    bytes := append([]byte("old "), "falcon"...)

    fmt.Println(bytes)
    fmt.Println(string(bytes))
}

在本例中,我们使用 append 向字节切片添加新字节。

$ go run main.go
[111 108 100 32 102 97 108 99 111 110]
old falcon

复制元素

在下一个示例中,我们使用 append 复制元素。

main.go
package main

import "fmt"

func main() {

    a := []int{1, 2, 3, 4}
    b := []int{}

    b = append(b, a...)

    fmt.Println(a)
    fmt.Println(b)
}

a 切片中的元素被复制到 b 切片中。

a := []int{1, 2, 3, 4}

我们有一个整数切片。

b := []int{}

创建了一个新的空切片。

b = append(b, a...)

省略号运算符解包 a 的所有值,并使用 append 将它们插入到空的 b 中。

$ go run main.go 
[1 2 3 4]
[1 2 3 4]

删除元素

删除实际上是创建了一个不包含指定元素的新切片。

main.go
package main

import "fmt"

func main() {

    a := []int{1, 2, 3, 4, 5}
    b := []int{1, 2, 3, 4, 5}

    i := 3
    j := 0

    a = append(a[:i], a[i+1:]...)

    fmt.Println(a)

    b = append(b[:j], b[j+1:]...)
    fmt.Println(b)
}

我们删除了第一个和第四个元素。

a = append(a[:i], a[i+1:]...)

在索引操作中,第一个索引(冒号之前)是包含的,第二个索引是不包含的。

$ go run main.go 
[1 2 3 5]
[2 3 4 5]

Pop 操作

Pop 操作会移除最后一个元素并返回它。

main.go
package main

import "fmt"

func main() {

    a := []int{1, 2, 3, 4, 5}

    i := len(a) - 1

    var x int

    x, a = a[i], a[:i]
    fmt.Println(x)
    fmt.Println(a)
}

在本例中,我们将最后一个整数从切片中移除,并将其返回到 x 变量中。

$ go run main.go 
5
[1 2 3 4]

在元素前添加

Prepend 操作将一个元素插入到切片的开头。

main.go
package main

import "fmt"

func main() {

    a := []int{1, 2, 3, 4, 5}
    e := 0

    a = append([]int{e}, a...)
    fmt.Println(a)
}

我们创建一个包含我们想要前置的值的新切片,并将现有 a 切片的所有元素追加到它上面。

$ go run main.go 
[0 1 2 3 4 5]

插入元素

在下一个示例中,我们将一个新元素插入到切片中。

main.go
package main

import "fmt"

func main() {

    a := []int{1, 2, 4, 5}

    i := 2
    e := 3

    a = append(a[:i], append([]int{e}, a[i:]...)...)
    fmt.Println(a)
}

将新值 3 插入到 a 切片中。我们使用了两次 append 函数。

来源

Go 内置包 - 参考

在本文中,我们展示了如何使用 append 内置函数。

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面有十多年的经验。

列出所有 Go 教程