go学习笔记append

append

向slice尾部添加数据,返回新的slice对象
package main

import "fmt"

func main() {
    s := make([]int, 0, 5)
    fmt.Printf("%p\n", &s)      //0xc42000e1a0

    s2 := append(s, 1)
    fmt.Printf("%p\n", &s2)     //0xc42000e1c0

    fmt.Println(s, s2)          //[] [1]
}
append多个值
package main

import "fmt"

func main() {
    data := [...]int{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}
    s := data[:3]
    s2 := append(s, 100, 200)

    fmt.Println(data)           //[0 1 2 100 200 5 6 7 8 9]
    fmt.Println(s)              //[0 1 2]
    fmt.Println(s2)             //[0 1 2 100 200]
}
一旦超出原slice.cap限制,就会重新分配底层数组,即便原数组并未填满
package main

import "fmt"

func main() {
    data := [...]int{0, 1, 2, 3, 4, 10:0}
    s := data[:2:3]
    s = append(s, 100, 200) //一次append两个值,超出s.cap限制,append后的s重新分配了底层数组,并复制数据,如果只追加一个值,则不会重新分配底层数组

    fmt.Println(s, data)    //重新分配底层数组,与原数组无关
    fmt.Println(&s[0], &data[0])    //比对底层数组起始指针
}
坚持原创技术分享,您的支持将鼓励我继续创作!