Golang数组操作指南
作为一个Golang新手,想请教一下关于数组操作的问题:
- Golang中如何声明和初始化不同类型的数组?
- 数组和切片有什么区别?什么时候该用数组而不是切片?
- 常见的数组操作有哪些,比如遍历、查找、排序等该怎么实现?
- 多维数组在Golang中该如何使用?
- 数组作为函数参数传递时是值传递还是引用传递?
- 有没有性能优化的技巧或者需要注意的坑?
2 回复
Golang数组是固定长度的同类型元素集合。常用操作包括:声明 var arr [5]int,初始化 arr := [3]int{1,2,3},访问 arr[0],遍历使用 for i, v := range arr。注意数组长度不可变,可用切片实现动态数组。
更多关于Golang数组操作指南的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang数组操作指南
数组声明与初始化
// 声明数组
var arr1 [5]int
var arr2 [3]string
// 初始化数组
arr3 := [3]int{1, 2, 3}
arr4 := [...]int{1, 2, 3, 4, 5} // 编译器推断长度
arr5 := [5]int{1: 10, 3: 30} // 指定索引初始化
基本操作
// 访问元素
arr := [3]int{10, 20, 30}
fmt.Println(arr[0]) // 输出: 10
// 修改元素
arr[1] = 25
// 获取数组长度
length := len(arr)
// 遍历数组
for i := 0; i < len(arr); i++ {
fmt.Println(arr[i])
}
// 使用range遍历
for index, value := range arr {
fmt.Printf("索引: %d, 值: %d\n", index, value)
}
多维数组
// 二维数组
var matrix [2][3]int
matrix[0] = [3]int{1, 2, 3}
matrix[1] = [3]int{4, 5, 6}
// 初始化二维数组
matrix2 := [2][2]int{
{1, 2},
{3, 4},
}
数组作为函数参数
// 数组是值类型,传递时会复制
func modifyArray(arr [3]int) {
arr[0] = 100 // 不会影响原数组
}
func main() {
arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println(arr) // 输出: [1 2 3]
}
重要特性
- 固定长度:数组长度在编译时确定,不可改变
- 值类型:赋值和传参时会复制整个数组
- 类型安全:
[3]int和[5]int是不同的类型
实用技巧
// 数组比较(只有相同类型的数组才能比较)
arr1 := [2]int{1, 2}
arr2 := [2]int{1, 2}
fmt.Println(arr1 == arr2) // 输出: true
// 清空数组
arr := [3]int{1, 2, 3}
arr = [3]int{} // 所有元素变为0
注意事项
- 数组长度是类型的一部分,不同长度的数组不能相互赋值
- 对于需要动态大小的场景,建议使用切片(slice)
- 大数组作为函数参数时考虑使用指针避免复制开销
数组在Go中主要用于固定大小的数据集合,大多数情况下推荐使用切片以获得更灵活的操作。

