數組
同一種類型的集合稱之為數組,數組是一組已編號且長度固定的數據項序列,數組中可以是任意的相同類型,數組的長度必須是一個常量或常量表達式,數組的索引是從0開始,到len(Array) - 1 的長度,數組的長度必須在聲明時就固定下來。在Go語言中,類型控制的是非常嚴格的,比如:[2]int 和 [3]int 就是兩種不同的類型。
使用
func main() {
// 先聲明,然后再賦值
a := [2]int{}
a[0] = 1
a[1] = 2
// 聲明的時候初始化
b := [2]int{3, 4}
// 以元素的個數初始化
c := [...]int{5, 6, 7, 8}
// 以下標初始化
d := [4]int{1: 9, 3: 10}
// 以 new 初始化, 返回數組的指針
e := new([5]int)
fmt.Println(a)
fmt.Println(b)
fmt.Println(c)
fmt.Println(d)
fmt.Println(e)
// 輸出
// [1 2]
// [3 4]
// [5 6 7 8]
// [0 9 0 10]
// &[0 0 0 0 0]
}
二維數組
func main() {
arr := [2][3]int{{12,13,14},{15,16,17}}
fmt.Println(arr)
// 輸出:
// [[12 13 14] [15 16 17]]
}
數組在函數間的傳遞
能通過第一次的打印看出來,初始化出來的數組都是值類型的,那么數組在函數間的傳遞也是值類型的嗎?
func arrPrint(arr [4]int) {
arr[2] = 100
fmt.Println("arrPrint:",arr)
}
func main() {
arr := [4]int{1,2,3,4}
arrPrint(arr)
fmt.Println("main:",arr)
// 輸出:
// arrPrint: [1 2 100 4]
// main: [1 2 3 4]
}
能過上面的例子,可以發現,上現函數中修改了數組中的值,但是 main 函數中的打印並沒有改變,所以可以確定,數組在函數間傳遞的時候就是值傳遞。
這樣又會造成一個問題,因為值傳遞是數組間的復制,如果一個數組小的時候,對性能影響不會很大,但是當一個數組非常大的時候,對程序的性能就會造成很大的影響了,所以為了解決這個問題,在使用數組進行傳值的時候一般都會使用地址傳遞,在函數中使用指針類型的數組進行接收。
在實際開發的時候,因為數組的擴展性不好,所以一般不使用數組,基本上使用的都是切片
數組因為是值類型,所以,在類型完全相同的情況下支持使用
==
!=
比較
關注公眾號,隨時獲取最新資訊
細節決定成敗!
個人愚見,如有不對,懇請斧正!