概述

数组是由相同类型的元素的集合组成的数据结构。计算机会为数组分配一块连续的内存来保存其中的元素 。

我们可以利用数组中元素的索引快速访问特定元素。

数组作为一种基本的数据类型,我们通常会从两个维度描述数组,也就是数组中存储的元素类型和数组最大能存储的元素个数,在 Go 语言中我们往往会使用如下所示的方式来表示数组类型:

Go 语言数组在初始化之后大小就无法改变,存储元素类型相同、但是大小不同的数组类型在 Go 语言看来也是完全不同的,只有两个条件都相同才是同一类型。

编译期间的数组类型是由上述的 cmd/compile/internal/types.NewArray 函数生成的,该类型包含两个字段,分别是元素类型 Elem 和数组的大小 Bound,这两个字段共同构成了数组类型,而当前数组是否应该在堆栈中初始化也在编译期就确定了。

声明数组

Go 语言数组声明需要指定元素类型及元素个数,语法格式如下:

  1. var variable_name [SIZE] variable_type

以上为一维数组的定义方式。例如以下定义了数组 balance 长度为 10 类型为 float32:

  1. var balance [10] float32

初始化数组

以下演示了数组初始化:

  1. var balance = [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

我们也可以通过字面量在声明数组的同时快速初始化数组:

  1. balance := [5]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果数组长度不确定,可以使用 **...** 代替数组的长度,编译器会根据元素个数自行推断数组的长度:

  1. var balance = [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}
  1. balance := [...]float32{1000.0, 2.0, 3.4, 7.0, 50.0}

如果设置了数组的长度,我们还可以通过指定下标来初始化元素:

  1. // 将索引为 1 和 3 的元素初始化
  2. balance := [5]float32{1:2.0,3:7.0}

:::warning 初始化数组中 {} 中的元素个数不能大于 [] 中的数字。

:::

访问数组元素

数组元素可以通过索引(位置)来读取。格式为数组名后加中括号,中括号中为索引的值。例如:

  1. var salary float32 = balance[9]

以上实例读取了数组 balance 第 10 个元素的值。

总结

  • 数组的长度是固定的
  • 数组的长度在声明它的时候就必须给定,并且在之后不会再改变