目录
描述append函数是Go的内置函数,它可以为切片动态的添加元素。append函数返回添加后的切片。
语法和参数函数签名
func append(slice []Type, elems ...Type) []Type
参数名称 | 含义 |
slice | 待添加元素的切片 |
elems | 要添加的元素 |
append函数允许一次性添加多个值。
使用示例给切片添加元素
package main
import "fmt"
func main() {
demo := make([]int, 0, 1)
demo = append(demo, 1)
fmt.Println("demo:", demo)
// outputs: demo: [1]
}
给切片添加多个元素
package main
import "fmt"
func main() {
demo := make([]int, 0, 1)
demo = append(demo, 1, 3, 5)
fmt.Println("demo:", demo)
// outputs: demo: [1 3 5]
}
合并其它切片
借助append函数,可以将一个切片合并到另一个切片中:
package main
import "fmt"
func main() {
s1 := []int{23, 26, 28}
s2 := []int{3, 6, 9}
s1 = append(s1, s2...)
fmt.Println(s1)
// output: [23 26 28 3 6 9]
}
注意事项
append返回的新切片与原切片是否指向同一块内存地址
根据切片的性质,当使用append函数给切片添加元素后,切片的length未超过append前的cap,则切片不会扩容,因此append返回的切片与原切片指向同一个内存地址。反之,append返回扩容后的切片,与原切片的内存地址不同:
package main
import "fmt"
func main() {
source := make([]int, 0, 3)
fmt.Printf("source address: %p\n", source)
// output: source address: 0xc0000b6020
source = append(source, 1)
fmt.Printf("source address: %p\n", source)
// output: source address: 0xc0000b6020
source = append(source, 2, 3)
fmt.Printf("source address: %p\n", source)
// output: source address: 0xc0000ba000
}