最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

數組介紹

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

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

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

聲明方式

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

示例代碼:

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)
}

輸出結果:

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

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

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

數組的特性

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

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

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

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

示例代碼:

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

輸出結果:

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

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

示例代碼:

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)
}

輸出結果:

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

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

總結

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

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

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

相關文章

  • golang基于Mutex實現(xiàn)可重入鎖

    golang基于Mutex實現(xiàn)可重入鎖

    鎖可重入也就是當前已經獲取到鎖的goroutine繼續(xù)調用Lock方法獲取鎖,Go標準庫中提供了sync.Mutex實現(xiàn)了排他鎖,但并不是可重入的,所以本文給大家介紹了golang基于Mutex實現(xiàn)可重入鎖,文中有詳細的代碼示例,需要的朋友可以參考下
    2024-03-03
  • 淺談golang的http cookie用法

    淺談golang的http cookie用法

    本篇文章主要介紹了golang的http cookie用法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Golang健康檢查接口的實現(xiàn)

    Golang健康檢查接口的實現(xiàn)

    本文主要介紹了Golang健康檢查接口的實現(xiàn),包括存活探針和就緒探針的區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-04-04
  • 一文帶你掌握Golang中的值類型和引用類型

    一文帶你掌握Golang中的值類型和引用類型

    在?Golang?中,數據類型可以分為兩大類:值類型(Value?Types)和引用類型(Reference?Types),理解這兩種類型的區(qū)別對于理解?Golang?中的數據傳遞和內存管理是很重要的,下面就跟隨小編一起深入了解一下它們吧
    2024-01-01
  • Go sync WaitGroup使用深入理解

    Go sync WaitGroup使用深入理解

    這篇文章主要為大家介紹了Go sync WaitGroup使用深入理解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • go項目實現(xiàn)mysql接入及web?api的操作方法

    go項目實現(xiàn)mysql接入及web?api的操作方法

    這篇文章主要介紹了go項目實現(xiàn)mysql接入以及web api,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-08-08
  • Go基礎系列:Go切片(分片)slice詳解

    Go基礎系列:Go切片(分片)slice詳解

    這篇文章主要介紹了Go語言中的切片(分片)slice詳細說明?,需要的朋友可以參考下
    2022-04-04
  • Go-Swagger的踩坑記錄分享

    Go-Swagger的踩坑記錄分享

    用戶分享在Win10安裝Go-Swagger時遇到命令未識別問題,通過拉取源碼至GOPATH/pkg/mod目錄,執(zhí)行安裝命令生成swagger.exe,需將GOPATH/bin加入系統(tǒng)環(huán)境變量并重啟終端
    2025-07-07
  • Go語言執(zhí)行cmd命令庫的方法實現(xiàn)

    Go語言執(zhí)行cmd命令庫的方法實現(xiàn)

    go語言用來執(zhí)行一個系統(tǒng)的命令相對python來說還是有點復雜的,執(zhí)行命令是一個非常常見的需求,本文主要介紹了Go語言執(zhí)行cmd命令庫的方法實現(xiàn),感興趣的可以了解一下
    2023-09-09
  • 深入探討Go語言中常用限流算法的原理到實踐

    深入探討Go語言中常用限流算法的原理到實踐

    限流(Rate?Limiting)是一種控制請求或數據流量的技術,用于限制系統(tǒng)在單位時間內處理的請求數量,是保護系統(tǒng)穩(wěn)定性的重要手段,本文將深入探討Go語言中常用的限流算法,從原理到實踐,幫助開發(fā)者掌握限流技術,構建更穩(wěn)定的服務
    2026-04-04

最新評論

江油市| 西乡县| 新化县| 平谷区| 溆浦县| 蚌埠市| 林口县| 涞水县| 阳泉市| 皮山县| 聂拉木县| 尤溪县| 大丰市| 康保县| 昌吉市| 尼玛县| 四会市| 芦溪县| 南投市| 沾化县| 五大连池市| 山阳县| 自治县| 仁化县| 阿拉善左旗| 洛阳市| 肃北| 新邵县| 泽州县| 泰安市| 赞皇县| 建阳市| 陇南市| 枞阳县| 孝感市| 油尖旺区| 凤山县| 科技| 大悟县| 南川市| 大兴区|