切片(Slice)
切片是 Go 语言中基于数组的一种动态大小的序列。与数组不同,切片的长度可以在运行时动态改变。切片比数组更常用,因为它们更灵活且功能强大。
切片可以进行的操作
- 访问元素:通过索引
[]
访问切片中的元素。 - 修改元素:通过索引
[]
可以修改切片中的元素。 - 获取长度和容量:使用
len()
获取切片的当前长度,使用cap()
获取切片的容量。 - 切片操作:可以通过
[:]
从现有切片创建子切片。 - 添加元素:使用
append()
向切片中追加元素,切片长度会自动扩展。 - 遍历切片:通过
for
循环或range
遍历切片中的元素。
示例代码
// 定义切片
var s []int = []int{1, 2, 3}
// 访问和修改元素
firstElement := s[0] // 访问元素,结果为 1
s[1] = 10 // 修改第二个元素,切片变为 [1, 10, 3]
// 获取长度和容量
length := len(s) // 长度为 3
capacity := cap(s) // 容量可能大于 3,取决于切片的底层数组
// 切片的切片
subSlice := s[1:3] // 结果为 [10, 3]
// 向切片追加元素
s = append(s, 4) // 结果为 [1, 10, 3, 4]
// 遍历切片
for i := 0; i < len(s); i++ {
fmt.Println(s[i])
}
// 使用 range 遍历
for index, value := range s {
fmt.Printf("Index: %d, Value: %d\n", index, value)
}
特别注意
- 切片的容量和长度:切片的长度是当前元素的数量,而容量是从切片的起始位置到底层数组末尾的元素个数。追加元素时,如果超出容量,切片会自动扩容。
- 共享底层数组:多个切片可能共享同一个底层数组,对一个切片的修改可能会影响另一个切片。
总结
- 切片是基于数组的动态序列,支持动态扩展长度。
- 可以使用
append()
轻松向切片添加元素,通过len()
和cap()
获取其长度和容量,适合处理动态数据集合。