Golang数组操作指南

作为一个Golang新手,想请教一下关于数组操作的问题:

  1. Golang中如何声明和初始化不同类型的数组?
  2. 数组和切片有什么区别?什么时候该用数组而不是切片?
  3. 常见的数组操作有哪些,比如遍历、查找、排序等该怎么实现?
  4. 多维数组在Golang中该如何使用?
  5. 数组作为函数参数传递时是值传递还是引用传递?
  6. 有没有性能优化的技巧或者需要注意的坑?
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]
}

重要特性

  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中主要用于固定大小的数据集合,大多数情况下推荐使用切片以获得更灵活的操作。

回到顶部