首页 > Go语言教程 > Go语言容器 阅读:1,509

Go语言数组详解

< 上一页Go语言容器 Go语言切片下一页 >

pk10开户推出辅导班啦,包括「C语言辅导班、C++辅导班、算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + 布置作业 + 项目实践 + 永久学习。QQ在线,随时响应!

数组(Array)是一段固定长度的连续内存区域。

Go 语言中,数组从声明时就确定,使用时可以修改数组成员,但是数组大小不可变化。

C/C++ 中的数组

C语言和 Go 语言中的数组概念完全一致。C语言的数组也是一段固定长度的内存区域,数组的大小在声明时固定下来。下面演示一段C语言的数组:
int a[10]={ 0,1,2,3,4,5,6,7,8,9 };
int b[4];
此时,a 和 b 类型都是 int*,也就是整型指针。而C语言中,也可以使用 malloc() 函数动态地分配一段内存区域。C++ 语言中可以使用 new() 函数。例如:
int* a = (int*)malloc(10);
int* b = new int(4);
此时,a 和 b 的类型也是 int*。a 和 b 此时分配内存的方式类似于 Go 语言的切片。

Go 的数组和切片都是从C语言延续过来的设计。

Go 语言数组的声明

数组的写法如下:

var 数组变量名 [元素数量]T

其中:
  • 数组变量名:数组声明及使用时的变量名。
  • 元素数量:数组的元素数量。可以是一个表达式,但最终通过编译期计算的结果必须是整型数值。也就是说,元素数量不能含有到运行时才能确认大小的数值。
  • T 可以是任意基本类型,包括 T 为数组本身。但类型为数组本身时,可以实现多维数组。

下面是一段数组的演示例子:
var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"

fmt.Println(team)
输出结果:
[hammer soldier mum]

代码说明如下:
  • 第 1 行,将 team 声明为包含 3 个元素的字符串数组。
  • 第 2~4 行,为 team 的元素赋值。

Go语言数组的初始化

数组可以在声明时使用初始化列表进行元素设置,参考下面的代码:
var team = [3]string{"hammer", "soldier", "mum"}
这种方式编写时,需要保证大括号后面的元素数量与数组的大小一致。但一般情况下,这个过程可以交给编译器,让编译器在编译时,根据元素个数确定数组大小。
var team = [...]string{"hammer", "soldier", "mum"}

...表示让编译器确定数组大小。上面例子中,编译器会自动为这个数组设置元素个数为 3。

遍历数组——访问每一个数组元素

遍历数组也和遍历切片类似,看下面代码:
var team [3]string
team[0] = "hammer"
team[1] = "soldier"
team[2] = "mum"

for k, v := range team {
    fmt.Println(k, v)
}
代码输出结果:
hammer
soldier
mum

代码说明如下:
  • 第 6 行,使用 for 循环,遍历 team 数组,遍历出的键 k 为数组的索引,值 v 为数组的每个元素值。
  • 第 7 行,将每个键值打印出来。
< 上一页Go语言容器 Go语言切片下一页 >