Go append函数:给切片添加元素/合并切片

目录

描述

语法和参数

使用示例

给切片添加元素

给切片添加多个元素

合并其它切片

注意事项

append返回的新切片与原切片是否指向同一块内存地址


描述

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
}

猜你喜欢

转载自blog.csdn.net/TCatTime/article/details/113089384