go 数组

在 Go 语言中,数组(array)是一种固定长度的、具有相同类型元素的序列。数组的长度是数组类型的一部分,因此不同长度的数组被认为是不同的类型。数组在 Go 中是一个值类型,这意味着当数组被赋值或传递时,会复制整个数组的内容。

数组的定义

数组的定义语法如下:

var arrayName [length]Type
  • arrayName 是数组的名称。
  • length 是数组的长度,必须是常量。
  • Type 是数组中元素的类型。

例如:

var arr [5]int // 定义一个长度为5的int类型数组

数组的初始化

  1. 默认初始化
    数组的元素会被初始化为其类型的零值。

    var arr [5]int
    fmt.Println(arr) // 输出: [0 0 0 0 0]
  2. 使用数组字面量初始化
    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr) // 输出: [1 2 3 4 5]
  3. 部分初始化
    可以只初始化数组的一部分,未初始化的元素会被设置为零值。

    arr := [5]int{1, 2}
    fmt.Println(arr) // 输出: [1 2 0 0 0]
  4. 使用 ... 自动推断长度
    如果使用 ... 代替数组长度,Go 会根据初始化的元素数量自动推断数组长度。

    arr := [...]int{1, 2, 3, 4, 5}
    fmt.Println(arr) // 输出: [1 2 3 4 5]

数组的访问和修改

  1. 访问数组元素
    使用下标访问数组元素,下标从 0 开始。

    arr := [5]int{1, 2, 3, 4, 5}
    fmt.Println(arr[2]) // 输出: 3
  2. 修改数组元素
    可以通过下标修改数组元素。

    arr := [5]int{1, 2, 3, 4, 5}
    arr[2] = 10
    fmt.Println(arr) // 输出: [1 2 10 4 5]

数组的长度

使用 len 函数可以获取数组的长度。

arr := [5]int{1, 2, 3, 4, 5}
fmt.Println(len(arr)) // 输出: 5

数组的遍历

  1. 使用 for 循环遍历
    arr := [5]int{1, 2, 3, 4, 5}
    for i := 0; i < len(arr); i++ {
        fmt.Println(arr[i])
    }
  2. 使用 range 关键字遍历
    arr := [5]int{1, 2, 3, 4, 5}
    for index, value := range arr {
        fmt.Printf("arr[%d] = %d\n", index, value)
    }

数组是值类型

数组在 Go 中是值类型,这意味着当数组被赋值或传递时,会复制整个数组的内容。

arr1 := [3]int{1, 2, 3}
arr2 := arr1 // arr2 是 arr1 的副本
arr2[0] = 10
fmt.Println(arr1) // 输出: [1 2 3]
fmt.Println(arr2) // 输出: [10 2 3]

多维数组

Go 支持多维数组,例如二维数组:

var arr [2][3]int // 定义一个2行3列的二维数组
arr = [2][3]int{
    {1, 2, 3},
    {4, 5, 6},
}
fmt.Println(arr) // 输出: [[1 2 3] [4 5 6]]

数组的局限性

  • 数组的长度是固定的,无法动态调整。
  • 数组是值类型,传递大数组时会有性能开销。

总结

数组是 Go 语言中的一种基本数据结构,适用于需要固定长度序列的场景。由于数组的长度是类型的一部分,因此在需要动态调整长度时,通常会使用切片(slice)来代替数组。理解数组的特性和局限性对于编写高效的 Go 代码非常重要。

Posted in Go