欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go語言為什么很少使用數(shù)組原理解析

 更新時間:2023年12月25日 09:53:53   作者:frank  
這篇文章主要為大家介紹了Go語言為什么很少使用數(shù)組原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

數(shù)組介紹

在 Go 語言中,數(shù)組是一塊連續(xù)的內(nèi)存,數(shù)組不可以擴容,數(shù)組在作為參數(shù)傳遞時,屬于值傳遞。

數(shù)組的長度和類型共同決定數(shù)組的類型,不同類型的數(shù)組之間不可以比較,否則在編譯時會報錯。

因為數(shù)組的一些特性,我們在 Go 項目開發(fā)中,很少使用數(shù)組。本文我們介紹一下數(shù)組的特性。

聲明方式

在 Go 語言中,數(shù)組的聲明方式有三種。

示例代碼:

func main() {
    var arr1 [2]int
    var arr2 = [2]int{1, 2}
    var arr3 = [...]int{1, 2}
    fmt.Println(arr1)
    fmt.Println(arr2)
    fmt.Println(arr3)
}

輸出結(jié)果:

[0 0]
[1 2]
[1 2]

閱讀上面這段代碼,我們使用三種方式聲明數(shù)組,其中 arr1 和 arr2 的區(qū)別是,arr1 在聲明時沒有為數(shù)組賦值,所以輸出結(jié)果是類型零值 [0 0]。

需要注意的是,arr3 沒有指定數(shù)組的長度,而是使用 [...] 替代,這實際上是 Go 語言中聲明數(shù)組的語法糖,編譯時通過數(shù)組的賦值,自動推斷數(shù)組的長度,我們可以使用內(nèi)置函數(shù) len() 查詢數(shù)組的長度。

數(shù)組的特性

在了解嘞數(shù)組的聲明方式之后,我們再來介紹一下數(shù)組具有哪些特性。

數(shù)組的長度和類型共同決定數(shù)組的類型,例如 var arr1 [2]int 和 var arr2 [3]int 是不同的類型。并且不同類型的數(shù)組之間是不可以比較的,數(shù)組也不可以擴容。

如果數(shù)組長度小于等于 4 時,在編譯時會對數(shù)組做內(nèi)存優(yōu)化,程序啟動時在棧區(qū)初始化數(shù)組,我們在使用數(shù)組類型時,也可以注意一下這一點。

使用數(shù)組下標訪問數(shù)組中的元素時,越界訪問,在編譯時會報錯。但是,如果我們使用變量 arr[i] 作為數(shù)組下標訪問數(shù)組中的元素,在編譯時無法檢查是否越界訪問,在運行時會引發(fā) panic。

示例代碼:

func Store() {
    var arr [2]int
    for i := 0; i < 5; i++ {
        arr[i] = i + 1
    }
    fmt.Println(arr)
}

輸出結(jié)果:

panic: runtime error: index out of range [2] with length 2
goroutine 1 [running]:
...

在作為參數(shù)傳遞數(shù)組類型的變量時,都屬于值傳遞,我們在使用數(shù)組類型的參數(shù)時,要特別注意。

示例代碼:

func main() {
    var arr2 = [2]int{1, 2}
    Get(arr2)
    fmt.Printf("arr2=%p\n%d\n", &arr2, arr2)
}
func Get(arr [2]int) {
    fmt.Printf("Get()=%p\n%d\n", &arr, arr)
}

輸出結(jié)果:

Get()=0xc0000120f0
[1 2]
arr2=0xc0000120b0
[1 2]

閱讀上面這段代碼,我們可以發(fā)現(xiàn)數(shù)組在作為參數(shù)傳遞時,地址發(fā)生變化,可以證明其屬于值傳遞,即分配一塊新內(nèi)存,將數(shù)組的值拷貝到新內(nèi)存。

總結(jié)

本文我們通過介紹 Go 語言中數(shù)組的一些特性,佐證數(shù)組在 Go 項目開發(fā)中很少使用的原因。

主要原因有兩點,一是數(shù)組不可以擴容;二是值傳遞,大數(shù)組要特別小心,如果無法避免使用大數(shù)組,可以使用數(shù)組指針。

以上就是Go語言為什么很少使用數(shù)組原理解析的詳細內(nèi)容,更多關(guān)于Go語言數(shù)組使用的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Golang兩行代碼實現(xiàn)發(fā)送釘釘機器人消息

    Golang兩行代碼實現(xiàn)發(fā)送釘釘機器人消息

    創(chuàng)建一個釘釘機器人必須使用加簽,本文通過Golang兩行代碼實現(xiàn)發(fā)送釘釘機器人消息,本文給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2021-12-12
  • go語言LeetCode題解720詞典中最長的單詞

    go語言LeetCode題解720詞典中最長的單詞

    這篇文章主要為大家介紹了go語言LeetCode題解720詞典中最長的單詞,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • go mock server的簡易實現(xiàn)示例

    go mock server的簡易實現(xiàn)示例

    這篇文章主要為大家介紹了go mock server的簡易實現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-07-07
  • golang優(yōu)先級隊列的實現(xiàn)全過程

    golang優(yōu)先級隊列的實現(xiàn)全過程

    優(yōu)先級隊列是一種特殊隊列,下面這篇文章主要給大家介紹了關(guān)于golang優(yōu)先級隊列的實現(xiàn)全過程,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-12-12
  • Go語言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運算

    Go語言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運算

    這篇文章主要為大家介紹了Go語言普通指針unsafe.Pointer?uintpt之間的關(guān)系及指針運算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Go語言中排序的3種實現(xiàn)方法

    Go語言中排序的3種實現(xiàn)方法

    在寫代碼過程中,排序是經(jīng)常會遇到的需求,這篇文章主要為大家介紹三種常用的方法,文中的示例代碼簡潔易懂,需要的小伙伴可以參考下
    2023-08-08
  • 圖文詳解Go中的channel

    圖文詳解Go中的channel

    Channel是go語言內(nèi)置的一個非常重要的特性,也是go并發(fā)編程的兩大基石之一,下面這篇文章主要給大家介紹了關(guān)于Go中channel的相關(guān)資料,需要的朋友可以參考下
    2023-02-02
  • Golang 獲取系統(tǒng)信息的實現(xiàn)

    Golang 獲取系統(tǒng)信息的實現(xiàn)

    本文主要介紹了Golang 獲取系統(tǒng)信息的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習或者工作具有一定的參考學(xué)習價值,需要的朋友們下面隨著小編來一起學(xué)習學(xué)習吧
    2022-06-06
  • 深入了解Golang為什么需要超時控制

    深入了解Golang為什么需要超時控制

    本文將介紹為什么需要超時控制,然后詳細介紹Go語言中實現(xiàn)超時控制的方法,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-05-05
  • Golang編程并發(fā)工具庫MapReduce使用實踐

    Golang編程并發(fā)工具庫MapReduce使用實踐

    這篇文章主要為大家介紹了Golang并發(fā)工具庫MapReduce的使用實踐,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-04-04

最新評論