欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 养生 > 一篇文章让你明白Go语言之数组的定义与用法

一篇文章让你明白Go语言之数组的定义与用法

2025/6/27 17:49:51 来源:https://blog.csdn.net/2302_79730293/article/details/143637607  浏览:    关键词:一篇文章让你明白Go语言之数组的定义与用法

Golang数组

  • 1. 数组的声明
    • 示例
  • 2. 数组的初始化
    • 初始化示例
  • 3. 访问和修改数组元素
    • 访问和修改元素的示例
  • 4. 数组的遍历
    • 遍历数组的示例
  • 5. 多维数组
    • 二维数组的示例
  • 6. 数组是值类型
    • 示例:数组的值传递
  • 7. 数组与切片的区别
  • 总结

在 Go 语言中,数组是一种固定长度的、元素类型一致的集合。它用于存储一定数量的相同类型数据,适用于数据量已知且不需要改变长度的场景。相比其他语言的数组,Go 语言的数组有一些特殊之处,比如 固定长度值类型

1. 数组的声明

在 Go 中,数组声明需要指定数组的长度和元素的类型。数组的长度是固定的,不能动态改变。

var arr [5]int // 声明一个长度为 5 的整型数组,默认值是 0

在这个例子中,arr 是一个长度为 5 的整数数组,每个元素的默认值是 0(对于整数类型)。其他类型的数组会有不同的默认值,如 float 的默认值为 0.0string 的默认值为 ""(空字符串),bool 的默认值为 false

示例

我们可以通过不同方式声明数组:

var intArray [10]int         // 10 个整型元素的数组
var stringArray [3]string    // 3 个字符串元素的数组
var boolArray [4]bool        // 4 个布尔值的数组

2. 数组的初始化

数组在声明时可以直接初始化值。可以在声明时为每个元素赋值,也可以使用 ... 让 Go 自动推断数组长度。

初始化示例

// 初始化方式一:直接指定元素
var arr1 = [5]int{1, 2, 3, 4, 5} // 长度为 5 的整数数组
fmt.Println(arr1) // 输出:[1 2 3 4 5]// 初始化方式二:让 Go 自动推断数组长度
var arr2 = [...]int{10, 20, 30} // 长度自动为 3
fmt.Println(arr2) // 输出:[10 20 30]// 初始化方式三:指定部分元素,未指定的元素使用默认值
arr3 := [5]int{1: 100, 3: 200} // 指定索引 1 和 3 的值
fmt.Println(arr3) // 输出:[0 100 0 200 0]

3. 访问和修改数组元素

数组元素可以通过索引访问。Go 语言的数组索引从 0 开始,到 长度 - 1 结束。我们可以使用索引来访问和修改数组的某个元素。

访问和修改元素的示例

arr := [5]int{1, 2, 3, 4, 5}fmt.Println(arr[0]) // 输出:1,访问第一个元素
arr[1] = 10         // 修改第二个元素的值
fmt.Println(arr)    // 输出:[1 10 3 4 5]

注意:访问数组时,索引不能超出数组的范围,否则会导致运行时错误。

4. 数组的遍历

Go 语言提供了两种常用方法来遍历数组:

  • 使用 for 循环
  • 使用 range 关键字

遍历数组的示例

arr := [5]int{10, 20, 30, 40, 50}// 方法一:使用传统的 for 循环
for i := 0; i < len(arr); i++ {fmt.Println(arr[i])
}// 方法二:使用 range 遍历数组
for index, value := range arr {fmt.Printf("Index: %d, Value: %d\n", index, value)
}

使用 range 遍历数组时可以同时获取索引元素的值,但如果不需要索引,可以使用 _ 来省略它:

for _, value := range arr {fmt.Println(value)
}

5. 多维数组

Go 语言支持多维数组。常见的多维数组有二维数组。二维数组可以理解为“数组的数组”,在数据结构上形成一个矩阵。

二维数组的示例

var matrix [3][3]int // 声明一个 3x3 的二维数组// 初始化二维数组
matrix := [3][3]int{{1, 2, 3},{4, 5, 6},{7, 8, 9},
}// 访问二维数组元素
fmt.Println(matrix[0][1]) // 输出:2,访问第一行第二列的元素// 修改二维数组元素
matrix[1][1] = 100 // 将第二行第二列的元素改为 100
fmt.Println(matrix)

可以使用嵌套的 for 循环或者 range 语句来遍历多维数组:

for i := 0; i < len(matrix); i++ {for j := 0; j < len(matrix[i]); j++ {fmt.Print(matrix[i][j], " ")}fmt.Println()
}

6. 数组是值类型

在 Go 语言中,数组是值类型,这意味着当数组被赋值给另一个数组,或者传递给函数时,会复制整个数组的数据。这种特性与一些其他语言(如 C/C++)不同,那里数组是引用传递。

示例:数组的值传递

func modifyArray(arr [3]int) {arr[0] = 100
}arr := [3]int{1, 2, 3}
modifyArray(arr)
fmt.Println(arr) // 输出:[1 2 3],因为原数组未被修改

在这个例子中,modifyArray 函数接收到的是 arr 的副本,因此对副本的修改不会影响原数组。如果需要修改原数组,可以使用指针(*)来传递数组的地址。

7. 数组与切片的区别

Go 语言中还有一种类似数组的数据结构叫切片slice)。切片与数组有以下区别:

  • 长度是否固定:数组长度固定,而切片长度可以动态增长。
  • 值传递 vs 引用传递:数组是值传递,复制时会创建新的副本;切片是引用传递,指向底层数组的相同位置。
  • 推荐使用:Go 通常推荐使用切片,因为切片更灵活,适合处理动态长度的数据。

例如:

arr := [5]int{1, 2, 3, 4, 5} // 数组,长度固定
slice := arr[1:4]            // 切片,从数组中切片,指向相同的底层数组
fmt.Println(slice)           // 输出:[2 3 4]

总结

  • 数组声明需要指定长度和元素类型,长度固定且不可更改。
  • 数组初始化可以使用完整的值列表,或者让 Go 自动推断长度。
  • 数组遍历可以用传统 for 循环或 range 关键字。
  • 多维数组是“数组的数组”,适用于矩阵类数据。
  • 数组是值类型,赋值或传参会复制整个数组。
  • 数组与切片的区别:数组是固定长度,切片可以动态扩展。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词