引言
切片是 Go 语言中一种非常灵活和强大的数据结构,它提供了动态数组的功能。与数组相比,切片可以轻松地改变其大小,并且提供了更多的内置操作。
1. 切片声明
- 基本语法:
- 使用 [ ] 后跟类型来声明切片。
- 示例:
var slice []int
- 初始化切片:
- 可以使用 make 函数来初始化切片。
- 示例:
slice := make([]int, 5) // 创建一个长度为 5 的切片
- 省略长度:
- 如果在初始化时提供了长度,可以省略初始长度,编译器会推断长度。
- 示例:
slice := make([]int, 5, 10) // 创建一个长度为 5,容量为 10 的切片
2. 访问切片元素
- 使用索引:
- 切片元素可以通过索引访问,索引从 0 开始。
- 示例:
fmt.Println(slice[0]) // 输出第一个元素
- 越界检查:
- 访问超出切片范围的索引会导致运行时错误。
- 示例:
fmt.Println(slice[5]) // 运行时错误:index out of range
3. 遍历切片
- 使用 for 循环:
- 可以使用 for 循环遍历切片。
- 示例:
for i := 0; i < len(slice); i++ {
fmt.Println(slice[i])
}
- 使用 for-range:
- 更简洁的方式是使用 for-range 循环。
- 示例:
for index, value := range slice {
fmt.Println(index, value)
}
4. 切片操作
- 追加元素:
- 使用 append 函数向切片末尾追加一个或多个元素。
- 示例:
slice = append(slice, 10)
- 复制切片:
- 使用 copy 函数复制一个切片。
- 示例:
newSlice := make([]int, len(slice))
copy(newSlice, slice)
- 切片切片:
- 使用切片操作符 [:] 来创建新的切片。
- 示例:
- subSlice := slice[1:3]
- 切片容量:
- 切片有一个隐式的容量属性,表示它可以增长的最大长度。
- 示例:
fmt.Println(cap(slice)) // 输出切片的容量
5. 编码
package main
import (
"fmt"
)
func main() {
// 声明并初始化切片
slice := make([]int, 5, 10)
for i := range slice {
slice[i] = i + 1
}
// 访问切片元素
fmt.Println(slice[0]) // 输出 1
// 遍历切片
for i := 0; i < len(slice); i++ {
fmt.Println(slice[i])
}
// 使用 for-range 遍历
for index, value := range slice {
fmt.Println(index, value)
}
// 追加元素
slice = append(slice, 6)
// 复制切片
newSlice := make([]int, len(slice))
copy(newSlice, slice)
// 切片切片
subSlice := slice[1:3]
// 显示容量
fmt.Println(cap(slice))
// 作为函数参数
printSlice(subSlice)
}
func printSlice(s []int) {
for _, v := range s {
fmt.Println(v)
}
}