首页 > 编程笔记 > Go语言笔记 阅读:18

Go语言append()函数的用法(附带实例)

append() 函数也是 Go 语言的内置函数,用于向切片添加元素。

实例演示 append() 函数的使用方法。

【实例 1】把 0~9 添加到切片中。分别声明一个 int 类型的切片和变量;使用 for 循环把 0~9 依次赋值给变量 i;把变量 i 的值依次添加到切片中;并打印切片。代码如下:
package main
import "fmt"

func main() {
    var numbers []int // 声明 int 类型的切片 numbers
    var i int // 声明 int 类型的变量 i
    for i = 0; i < 10; i++ {
        // 使用 for 循环把 0~9 依次赋值给变量 i
        // 把 0~9 依次添加到切片 numbers 中
        numbers = append(numbers, i)
    }
    fmt.Println(numbers) // 打印切片 numbers
}
运行结果如下:
[0 1 2 3 4 5 6 7 8 9]
每次向切片添加元素都应检测切片是否有足够的容量以容纳新元素。如果切片的容量不足,那么切片就会自动扩展容量。也就是说,切片自动扩展容量后,切片的长度也随之发生变化。

下面对实例 1 进行修改,演示向切片添加元素是如何改变切片的长度和容量的。

【实例 2】改变切片的长度和容量。向切片依次添加 0~9,每添加一个元素,先格式化输出切片的长度和容量,再打印切片。代码如下:
package main
import "fmt"

func main() {
    var numbers []int // 声明 int 类型的切片 numbers
    var i int // 声明 int 类型的变量 i
    for i = 0; i < 10; i++ {
        // 使用 for 循环把 0~9 依次赋值给变量 i
        // 把 0~9 依次添加到切片中
        numbers = append(numbers, i)
        //格式化输出切片的长度、切片的容量
        fmt.Printf("len: %d  cap: %d  ", len(numbers), cap(numbers))
        //输出添加元素后的切片 numbers
        fmt.Println("slice:", numbers)
    }
}
运行结果如下:
len:1  cap:1  slice:[0]
len:2  cap:2  slice:[0 1]
len:3  cap:4  slice:[0 1 2]
len:4  cap:4  slice:[0 1 2 3]
len:5  cap:8  slice:[0 1 2 3 4]
len:6  cap:8  slice:[0 1 2 3 4 5]
len:7  cap:8  slice:[0 1 2 3 4 5 6]
len:8  cap:8  slice:[0 1 2 3 4 5 6 7]
len:9  cap:16  slice:[0 1 2 3 4 5 6 7 8]
len:10 cap:16  slice:[0 1 2 3 4 5 6 7 8 9]
从上述运行结果能够总结出切片自动扩展容量的规律:按原有容量的两倍进行扩展。

相关文章