append()方法是为切片动态添加元素的常用方式。合理利用 append 可以极大地提高切片的便利性,实现动态增长数组的效果。
本文将详细介绍 append 的定义规范、切片扩容机制、append 多个元素、copy 与 append 结合使用等,并辅以具体代码示例,以帮助读者全面掌握 append 为切片添加元素的各种用法。
1
一、append 方法
append 方法的定义是:
func append(slice []T, elems ...T) []T
它可以为切片动态添加一个或多个元素。
2
二、切片扩容
当切片容量不够时,append 会自动扩容:
slice := []int{1, 2} slice = append(slice, 3) // 触发扩容
这让切片可以动态增长,不需要手动扩容。
3
三、一次 append 多个
append 支持同时追加多个元素:
slice = append(slice, 1, 2, 3)
这样可以避免多次调用带来的性能损耗。
4
四、扩容策略
当超过 1024 个元素时,扩容变成 1.25 倍,否则是 2 倍。
func main() { slice := make([]int, 0, 1) // 起始len=0, cap=1 for i := 0; i < 1024; i++ { slice = append(slice, i) } // len=1024, cap=1024 fmt.Println(len(slice), cap(slice)) // 1024 1024 slice = append(slice, 2048) // 超过1024个元素,cap变成1.25倍 fmt.Println(len(slice), cap(slice)) // 1025 1280 }
这个示例中,起始切片容量为 1。当元素个数达到 1024 时,容量也是 1024。当再次 append 时,由于元素超过 1024,容量变成了 1280,也就是 1.25 倍。如果不足 1024 时,扩容策略是 2 倍容量。
5
五、与 copy 结合
可以通过 copy 使切片扩容后拷贝原数据:
func ExpandSlice(slice []int) []int { newSlice := append(slice, 0) copy(newSlice, slice) return newSlice }
这在修改切片时保留原数据很有用。
6
六、 append 初始化切片
append 一个 nil 切片将初始化切片:
var slice []int slice = append(slice, 1)
7
总结
append 为切片添加元素非常高效方便,合理利用可以大大提升切片编程效率。