数组重要概念
数组(Array)是一种非常常见的数据类型,几乎所有的计算机编程语言中都会用到它在Go语言中,数组有如下的特点:
- 数组里的元素必须全部为同一类型,要嘛全部是字符串,要嘛全部是整数,要嘛全部是byte等等,这点和可以包罗万象,任何数据类型都能混杂在一起作为元素放入的Python中的列表是有本质区别的。
- 声明数组时,必须指定其长度或者大小(英文叫做length或者size),所谓长度就是该数组能包含的元素的最大个数。
- 数组是一个由固定长度的特定类型元素组成的序列,一个数组可以由零个或多个元素组成。因为数组的长度是固定的,所以在Go语言中很少直接使用数组。
声明数组
给该数组里的每个元素赋值(索引值的最小有效值和其他大多数语言一样是 0,不是1)// [3] 里的3 表示该数组的元素个数及容量
var arr [3]int
arr[0] = 1
arr[1] = 2
arr[2] = 3
声明并直接初始化数组
// 第一种方法
var arr [3]int = [3]int{1,2,3}
// 第二种方法
arr := [3]int{1,2,3}
如果你不确定数组里具体有多少个元素时,可以使用[…]替代具体的长度(比如[1], [2], [3]等等),Go的编译器会自动帮你算出该数组的长度。举例如下:
array2 := [...]int{5, 6, 7}
fmt.Println("数组array2的长度:", len(array2))
再看一个例子:
func main() {
var array1 = [5]int{0, 1, 2, 3, 4}
array2 := [...]int{5, 6, 7}
var array3 [10]int
fmt.Println("数组array1的长度:", len(array1))
fmt.Println("数组array2的长度:", len(array2))
fmt.Println("数组array3的长度:", len(array3))
}
输出:
这里我们分别用标准格式(隐式声明)、简短格式以及标准格式(显示声明)创建了三个整数数组变量array1,array2和array3。
针对数组array1我们通过[5]手动指明了它的长度(注意:这里array1里的元素个数刚好为0,1,2,3,4总共5个整数,和array1的长度匹配,其实这里我们不用一定要在数组里放满5个元素不可,只要元素个数不超过我们定义的长度就可以,因为数组的长度(或大小)指的是该数组能容纳的最大元素个数,并不是当前数组里有多少个元素。)
而针对array2,我们使用[…]让Go帮我们自动计算出了该数组的长度,结果为3。
最后我们用显示声明但是不赋值的方式声明了变量array3,该数组的长度为我们手动指定的10,而该数组里的元素则为10个整数0,也就是在声明变量但是不赋值的情况下,Go自动为我们给整数数据类型分配的零值。
数组一旦被创建过后,其长度就再也不能被更改(不管是改大还是改小),举例如下:
func main() {
var array1 = [5]int{0, 1, 2, 3, 4}
array2 := [...]int{5, 6, 7}
var array3 [10]int
fmt.Println("数组array1的长度:", len(array1))
fmt.Println("数组array2的长度:", len(array2))
fmt.Println("数组array3的长度:", len(array3))
array2 = [4]int{5, 6, 7}
}
输出:
如果将数组作为参数传入一个函数,Go会为该数组创建一个副本,实际传入函数中的是数组的副本而不是源本,因此在函数下面对该数组进行的任何操作都会在函数返回后丢失。