概述
与其他编程语言类似,Go语言也有数组array。Go语言中,数组的行为和其他语言没有什么不同.Go语言中还有一个叫做切片slice的东西,它就像是对数组的引用。在本文中,我们将只研究数组。
定义
数组是同一类型元素的连续集合,它是连续存储在内存中的有序元素序列。
下面是数组声明的格式:
- size_of_array:数组大小或数组长度,表示数组中所有元素的数量
- type :数组元素类型,表示数组中每一个元素的类型
- a1, a2 … an:表示数组中实际的元素值
Go语言中,数组的大小是其类型的一部分。这意味着两个拥有不同数量元素的数组是两种不同的类型,它们不能互相赋值。如果我们试图赋值两个不同长度的数组,将引发以下错误:
下面是代码示例:
出于同样的原因,数组的长度在创建时是固定的,以后不能更改。
数组的声明
元素数量和元素值在数组声明中都是可选的。
在下面的示例中,我们看到了声明数组的4种方法。
同时声明数组长度和元素值,如下所示:
只声明数组长度,这种情况下,所有实际元素值都是该类型的默认零值填充,如下所示:
只声明元素值,这种情况下,数组的长度将等于实际元素的数目。当不指定长度时,需要将符号...放在方括号内。该符号是让编译器计算数组长度的指令。
不声明数组长度和元素值,这种情况下,创建的是一个空数组,类似于上面,符号...也需要使用。
下面是以上4种数组声明的代码示例。内置函数len()是用于计算数组的长度。在下面的程序中,我们使用len()函数来计算数组的长度。
请注意,在上面的示例中,对于sample3变量,实际的元素值被int类型的默认值填充,即0。
如果指定的实际元素个数小于数组的长度,也是可以,其余元素将使用该类型的默认零值填充。请参见下面的示例,指定的数组长度为4,而只声明了2个实际元素值,因此,剩下的两个元素被赋值为0,这是int类型的默认零值。
访问数组元素
由于数组元素是以连续的方式存储的,所以我们可以通过索引来访问数组元素。同样,也可以使用索引为某个数组元素赋值。访问越界索引将导致编译错误。请参阅下面的示例,第一个索引位置为零,最后一个索引为数组长度减1(length_of_array-1)
取消对下面这行代码的注释:
你就会得到一条编译错误:
Go语言中的数组是值
数组在Go语言中的属于值类型,所以数组变量名不是指向第一个元素的指针,实际上它表示整个数组。
当以下情形发生时,一个数组的副本会被创建:
- 一个数组变量被赋值给另一个数组变量
- 数组变量作为参数传递给函数
让我们用另一个例子来看看:
在上面的例子中,
- 我们将sample1赋值给sample2,然后将sample2处的第0个索引的元素更改为不同的值。之后,当我们打印sample1时,我们看到它没有改变。这是因为当将sample1赋值给sample2时,会创建一个副本赋给它,而更改sample2对sample1没有任何影响。
- 我们将sample1传递给test函数,然后在test函数的第0个索引处再次更改其值。当我们再次打印sample1时,看到它仍然没有任何改变。原因是相同的,当sample1作为参数传递给test函数时,会创建sample1的副本。
迭代数组的不同方法
可以使用以下方法迭代一个数组:
- 使用for循环
- 使用for-range循环
让我们看看下面的代码示例:
多维数组
下面是声明一个二维数组的格式:
其中,
- x表示行数
- y表示列数
- aij表示i行j列的元素
同样的想法可以扩展到三维、四维等等。我们上面讨论的所有规则也适用于多维数组。
让我们看一个代码示例:
在上面的例子中,我们使用第一和第二维的索引来访问二维数组的元素
还要注意我们是如何遍历二维数组的。我们需要使用嵌套的range。第一个range遍历二维数组里的一维数组,第二个range遍历各个一维数组。
结论
这就是Go语言中关于数组的所有使用内幕,希望你喜欢这篇文章。请在评论中分享反馈和关注。