append、copy、切片容量与扩容原理
切片是动态数组,支持自动扩容,append 和 copy 是常用操作函数。
1. append 函数
append 用于向切片添加元素,可能导致底层数组扩容:
s := []int{1, 2, 3}
s = append(s, 4, 5)
`
如果容量不足,Go 会自动分配更大的数组并复制原数据。
2. copy 函数
copy 用于复制切片数据:
src := []int{1, 2, 3}
dst := make([]int, 2)
n := copy(dst, src) // 复制 n 个元素
fmt.Println(dst) // [1 2]
copy 会复制最小长度的数据。
3. 切片容量与扩容
cap(s)返回切片容量,决定可存储多少元素而无需扩容。- 当
append添加元素超过容量时,底层数组会扩容,通常扩容为原容量的两倍。
示例观察容量变化:
var s []int
for i := 0; i < 10; i++ {
s = append(s, i)
fmt.Printf("len=%d cap=%d %v\n", len(s), cap(s), s)
}
理解 append、copy 和容量机制,有助于高效使用切片和优化性能。
相关内容
- 什么是 Go Go 是由 Google 开发的一种开源编程语言,以简洁、高效、并发编程支持强著称,广泛应用于后端开发、云原生和微服务等领域。
- Go 的特点与适用场景 Go 语言以高并发、快速编译、简洁语法和强大标准库著称,适用于构建高性能网络服务、微服务架构和云原生应用。
- 安装 Go(Windows/Linux/macOS) 本节介绍如何在 Windows、Linux 和 macOS 上安装 Go 语言开发环境,包含安装步骤、验证方法及常见注意事项。
- 设置环境变量 本节介绍如何为 Go 语言配置环境变量,包括 GOPATH、GOROOT、PATH 等关键变量,适用于 Windows、Linux 和 macOS 系统。
- 第一个 Go 程序(Hello World) 本节将带你编写第一个 Go 程序“Hello, World”,帮助你快速了解 Go 的基础语法和程序结构。
- Go Modules 简介 本节介绍 Go Modules 的基本概念与用法,它是 Go 官方推荐的依赖管理方式,支持版本控制、依赖隔离和构建一致性。