Go语言数组的声明、初始化和使用(附带实例)
一行代码可以定义一个变量,但是通过定义变量的方式可以存储一家超市上百件商品的价格吗?如果把商品的价格均声明为 float64 型,定义变量时就要编写上百行几乎完全相同的代码(除变量名和变量值不同外)。这样不仅麻烦,还会产生大量重复代码。
那么如何解决这个问题呢?在 Go 语言中,可以用数组实现。
数组是具有固定长度、包含零个或多个相同类型元素的序列。数组中的每个元素都是通过索引被访问的;其中,与第一个元素对应的索引是 0,与第二个元素对应的索引是 1,与第 3 个元素对应的索引是 2,以此类推。
声明数组的语法格式如下:
例如,声明一个包含 7 个元素的 int 类型数组 value,使用 len() 函数计算这个数组的长度,并打印这个数组的长度。代码如下:
在声明数组后可通过索引访问数组中的元素。以上述示例中的数组 value 为例,第一个元素的表示形式为 value[0],最后一个元素的表示形式为 value[len(value) - 1]。
在上述示例中,只声明了包含 7 个元素的 int 类型数组 value,但尚未对其执行初始化操作。在这种情况下,数组 value 中的所有元素的值就是 int 类型的默认值,即 0。
打印数组 value 中的第一个元素和最后一个元素的值。代码如下:
当初始化数组时,虽然可以省略在声明数组的语法格式中的数组长度和元素类型,但是需要在表达式中指定数组长度和元素类型。
对数组 value 执行初始化操作,设置其中所有元素的初始值依次为 1、3、5、7、9、11 和 13。代码如下:
按照“短变量声明”的语法格式修改上述初始化数组 value 的代码。代码如下:
当初始化数组时,如果不确定数组长度,那么可使用“...”代替数组长度;编译器将根据元素个数自行推断数组长度。使用“...”代替上述示例中初始化数组 value 时指定的数组长度。代码如下:
例如,使用 3 种方式分别初始化数组 a、b 和 c。其中,数组 a 和 c 中的元素是 1、3、5 和 7;数组 b 中的元素是 2、4、6 和 8。使用运算符“==”分别判断数组 a 是否等于数组 b、数组 a 是否等于数组 c 和数组 b 是否等于数组 c。代码如下:
如下图所示,把上例中数组 b 中的元素类型修改为浮点数类型后,当判断数组 a 是否等于数组 b 时,程序无法完成编译:
如下图所示,把上例中数组 c 中的元素个数修改为 3 个后,当判断数组 a 是否等于数组 c 时,程序无法完成编译:
那么,该如何依次获取每个元素的索引呢?答案就是 for-range 循环语句。
例如,声明并初始化一个包含 4 个元素的字符串类型数组,存储 4 位古代著名诗人;使用 for-range 循环语句遍历数组;并使用 Printf() 函数格式化输出数组中的各个元素。代码如下:
那么如何解决这个问题呢?在 Go 语言中,可以用数组实现。
数组是具有固定长度、包含零个或多个相同类型元素的序列。数组中的每个元素都是通过索引被访问的;其中,与第一个元素对应的索引是 0,与第二个元素对应的索引是 1,与第 3 个元素对应的索引是 2,以此类推。
Go语言数组的声明
Go 语言的 var 关键字不仅可以声明变量,而且可以声明数组。当声明变量时,需要指定变量名和变量的类型。那么,当声明数组时,需要指定哪些与数组相关的要素呢?即数组的长度和数组中元素的类型。声明数组的语法格式如下:
var array_name [SIZE]array_type参数说明如下:
- array_name:数组变量名;
- SIZE:数组的长度,即数组中的元素个数;
- array_type:数组中元素的类型。
Go语言计算数组的长度
当使用 len() 函数处理数组时,len() 函数具有一个 int 类型的返回值,这个返回值表示数组的长度(即数组中的元素个数)。例如,声明一个包含 7 个元素的 int 类型数组 value,使用 len() 函数计算这个数组的长度,并打印这个数组的长度。代码如下:
var value [7]int fmt.Println("已声明的数组的长度 =", len(value))运行结果如下:
已声明的数组的长度 = 7
在声明数组后可通过索引访问数组中的元素。以上述示例中的数组 value 为例,第一个元素的表示形式为 value[0],最后一个元素的表示形式为 value[len(value) - 1]。
在上述示例中,只声明了包含 7 个元素的 int 类型数组 value,但尚未对其执行初始化操作。在这种情况下,数组 value 中的所有元素的值就是 int 类型的默认值,即 0。
打印数组 value 中的第一个元素和最后一个元素的值。代码如下:
var value [7]int fmt.Println("第一个元素的值 =", value[0]) fmt.Println("最后一个元素的值 =", value[len(value)-1])
Go语言数组的初始化
数组的初始化是指为数组中的元素设置初始值。下面讲解几种初始化数组的方法。当初始化数组时,虽然可以省略在声明数组的语法格式中的数组长度和元素类型,但是需要在表达式中指定数组长度和元素类型。
对数组 value 执行初始化操作,设置其中所有元素的初始值依次为 1、3、5、7、9、11 和 13。代码如下:
var value = [7]int{1, 3, 5, 7, 9, 11, 13}
按照“短变量声明”的语法格式修改上述初始化数组 value 的代码。代码如下:
value := [7]int{1, 3, 5, 7, 9, 11, 13}
当初始化数组时,如果不确定数组长度,那么可使用“...”代替数组长度;编译器将根据元素个数自行推断数组长度。使用“...”代替上述示例中初始化数组 value 时指定的数组长度。代码如下:
var value = [...]int{1, 3, 5, 7, 9, 11, 13}把上述代码按照“短变量声明”的语法格式进行修改。代码如下:
value := [...]int{1, 3, 5, 7, 9, 11, 13}
Go语言判断两个数组是否相等
如果两个数组具有相同的数组长度和元素类型,则可以使用运算符“==”和“!=”判断这两个数组是否相等。例如,使用 3 种方式分别初始化数组 a、b 和 c。其中,数组 a 和 c 中的元素是 1、3、5 和 7;数组 b 中的元素是 2、4、6 和 8。使用运算符“==”分别判断数组 a 是否等于数组 b、数组 a 是否等于数组 c 和数组 b 是否等于数组 c。代码如下:
package main // 声明 main 包 import "fmt" // 导入 fmt 包,用于打印字符串 func main() { // 声明 main() 函数 var a = [4]int{1, 3, 5, 7} // 声明并初始化包含 4 个元素的 int 类型数组 a b := [4]int{2, 4, 6, 8} // 声明并初始化包含 4 个元素的 int 类型数组 b c := [...]int{1, 3, 5, 7} // 声明并初始化不确定元素个数的 int 类型数组 c fmt.Println("数组 a 等于数组 b:", a == b) // 判断数组 a 是否等于数组 b,并打印判断结果 fmt.Println("数组 a 等于数组 c:", a == c) // 判断数组 a 是否等于数组 c,并打印判断结果 fmt.Println("数组 b 等于数组 c:", b == c) // 判断数组 b 是否等于数组 c,并打印判断结果 }运行结果如下:
数组 a 等于数组b: false
数组 a 等于数组c: true
数组 b 等于数组c: false
如下图所示,把上例中数组 b 中的元素类型修改为浮点数类型后,当判断数组 a 是否等于数组 b 时,程序无法完成编译:

如下图所示,把上例中数组 c 中的元素个数修改为 3 个后,当判断数组 a 是否等于数组 c 时,程序无法完成编译:

Go语言数组元素的访问
在数组中,通过元素的索引,即可访问指定元素。如果需要依次访问数组中的每个元素,则需要先依次获取每个元素的索引,这个过程称为遍历数组。那么,该如何依次获取每个元素的索引呢?答案就是 for-range 循环语句。
例如,声明并初始化一个包含 4 个元素的字符串类型数组,存储 4 位古代著名诗人;使用 for-range 循环语句遍历数组;并使用 Printf() 函数格式化输出数组中的各个元素。代码如下:
package main // 声明 main 包 import "fmt" // 导入 fmt 包,用于打印字符串 func main() { // 声明 main() 函数 // 声明并初始化包含 4 个元素的字符串类型数组,存储 4 位古代著名诗人 rankList := [4]string{"屈原", "李白", "杜甫", "苏轼"} fmt.Println("排行榜", "诗人姓名") // 打印提示信息 for i, v := range rankList { // 使用 for-range 循环语句,遍历数组 fmt.Printf("第%d名 %v\n", i+1, v) // 格式化输出数组中的各个元素 } }运行结果如下:
排行榜 诗人姓名 第1名 屈原 第2名 李白 第3名 杜甫 第4名 苏轼注意,在使用 for-range 循环语句遍历数组时,第 9 行代码中的变量 i 表示元素的索引。