Golang | 數組的定義和使用


數組

同一種類型的集合稱之為數組,數組是一組已編號且長度固定的數據項序列,數組中可以是任意的相同類型,數組的長度必須是一個常量或常量表達式,數組的索引是從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 函數中的打印並沒有改變,所以可以確定,數組在函數間傳遞的時候就是值傳遞。

這樣又會造成一個問題,因為值傳遞是數組間的復制,如果一個數組小的時候,對性能影響不會很大,但是當一個數組非常大的時候,對程序的性能就會造成很大的影響了,所以為了解決這個問題,在使用數組進行傳值的時候一般都會使用地址傳遞,在函數中使用指針類型的數組進行接收。

在實際開發的時候,因為數組的擴展性不好,所以一般不使用數組,基本上使用的都是切片

數組因為是值類型,所以,在類型完全相同的情況下支持使用 == !=比較



關注公眾號,隨時獲取最新資訊

細節決定成敗!
個人愚見,如有不對,懇請斧正!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM