Go 语言数组(Array)
                           
天天向上
发布: 2025-03-25 23:48:56

原创
289 人浏览过

在 Go 语言中,数组是一组固定大小的同类型元素的集合。与其他编程语言不同,Go 的数组是值类型,这意味着在将数组传递给函数时,数组会被复制。如果修改数组的元素,不会影响原数组。


1. 数组的定义与初始化

1.1 定义数组

Go 中定义数组的基本语法是:

var arrayName [size]DataType
  • size:数组的大小,指定数组中可以存储的元素数量。
  • DataType:数组元素的类型。

示例:

var arr [5]int  // 定义一个包含 5 个整数的数组

1.2 初始化数组

在 Go 中,数组可以在定义时进行初始化。可以通过以下两种方式进行初始化:

1.2.1 使用数组字面量初始化

通过数组字面量(直接赋值)初始化数组:

arr := [5]int{1, 2, 3, 4, 5}  // 初始化数组并赋值

1.2.2 使用 ... 自动推导数组大小

Go 允许在初始化数组时省略数组的大小,编译器会根据提供的元素个数自动推导数组大小:

arr := [...]int{1, 2, 3, 4, 5}  // 自动推导数组大小为 5

1.2.3 部分初始化

你也可以只初始化数组的一部分,未初始化的元素会自动被赋予零值(对于数字类型为 0,对于布尔类型为 false):

arr := [5]int{1, 2}  // 其他元素会被初始化为 0
fmt.Println(arr)  // 输出:[1 2 0 0 0]

2. 访问数组元素

Go 数组的元素是通过下标(索引)访问的。数组的下标从 0 开始。

2.1 访问和修改数组元素

arr := [5]int{1, 2, 3, 4, 5}

fmt.Println(arr[0])  // 输出第一个元素:1
arr[1] = 10          // 修改第二个元素
fmt.Println(arr[1])  // 输出修改后的第二个元素:10

3. 数组的长度

Go 数组的长度是固定的,并且可以通过内置的 len() 函数获得数组的长度。

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

4. 多维数组

Go 语言也支持多维数组,可以通过多个维度来定义一个数组。

4.1 二维数组

二维数组可以看作是数组的数组:

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

4.2 动态大小的二维数组

Go 中的二维数组大小是固定的。如果需要动态大小的二维数组,可以使用切片(slice)。

// 使用切片初始化二维数组
arr := [][]int{
    {1, 2, 3},
    {4, 5, 6},
}
fmt.Println(arr)  // 输出:[[1 2 3] [4 5 6]]

5. 数组是值类型

在 Go 中,数组是值类型。传递数组时,实际是传递了数组的副本。如果修改传入的数组副本,原数组不受影响。

示例:

package main

import "fmt"

func modifyArray(arr [5]int) {
    arr[0] = 100  // 修改数组的第一个元素
}

func main() {
    arr := [5]int{1, 2, 3, 4, 5}
    modifyArray(arr)
    fmt.Println(arr)  // 输出:[1 2 3 4 5],原数组没有改变
}

输出:

[1 2 3 4 5]

6. 数组与切片的区别

Go 中的切片(slice)与数组非常相似,但它是一个动态大小的数据结构,可以根据需要增长或缩小。而数组的大小在声明时就固定了,不可更改。

  • 数组:固定大小,存储元素是值类型,传递时会复制数组。
  • 切片:动态大小,灵活可变,传递时是引用类型,修改切片内容会影响原切片。

6.1 切片示例

arr := [5]int{1, 2, 3, 4, 5}
slice := arr[1:4]  // 创建一个切片,包含 arr[1], arr[2], arr[3]

fmt.Println(slice)  // 输出:[2 3 4]

7. 数组与切片的比较

特性数组切片
大小固定大小动态大小,可以增长或缩小
传递方式值类型,传递时会复制整个数组引用类型,传递的是引用
使用场景当你知道元素的数量并且不会更改时当元素数量动态变化时

8. 数组总结

  • 数组是同类型元素的集合,大小是固定的。
  • 数组是值类型,传递时会复制整个数组。
  • Go 支持多维数组,数组的大小是固定的,不能更改。
  • 数组的长度可以通过内置的 len() 函数获得。
  • 对于需要动态调整大小的数据结构,通常使用切片而非数组。

🔹 参考资料

发表回复 0

Your email address will not be published. Required fields are marked *