概述
與其他編程語言類似,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語言中關于數組的所有使用內幕,希望你喜歡這篇文章。請在評論中分享反饋和關注。