日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Go 語言為什么很少使用數組?

來源: 責編: 時間:2024-01-02 17:28:35 249觀看
導讀一、介紹在 Go 語言中,數組是一塊連續的內存,數組不可以擴容,數組在作為參數傳遞時,屬于值傳遞。數組的長度和類型共同決定數組的類型,不同類型的數組之間不可以比較,否則在編譯時會報錯。因為數組的一些特性,我們在 Go 項目

一、介紹

在 Go 語言中,數組是一塊連續的內存,數組不可以擴容,數組在作為參數傳遞時,屬于值傳遞。ySA28資訊網——每日最新資訊28at.com

數組的長度和類型共同決定數組的類型,不同類型的數組之間不可以比較,否則在編譯時會報錯。ySA28資訊網——每日最新資訊28at.com

因為數組的一些特性,我們在 Go 項目開發中,很少使用數組。本文我們介紹一下數組的特性。ySA28資訊網——每日最新資訊28at.com

ySA28資訊網——每日最新資訊28at.com

二、數組

1.聲明方式

在 Go 語言中,數組的聲明方式有三種。ySA28資訊網——每日最新資訊28at.com

示例代碼:ySA28資訊網——每日最新資訊28at.com

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

輸出結果:ySA28資訊網——每日最新資訊28at.com

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

閱讀上面這段代碼,我們使用三種方式聲明數組,其中 arr1 和 arr2 的區別是,arr1 在聲明時沒有為數組賦值,所以輸出結果是類型零值 [0 0]。ySA28資訊網——每日最新資訊28at.com

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

2.數組的特性

在了解完數組的聲明方式之后,我們再來介紹一下數組具有哪些特性。ySA28資訊網——每日最新資訊28at.com

數組的長度和類型共同決定數組的類型,例如 var arr1 [2]int 和 var arr2 [3]int 是不同的類型。并且不同類型的數組之間是不可以比較的。因為數組的長度是指定的,所以數組也不可以擴容。ySA28資訊網——每日最新資訊28at.com

如果數組長度小于等于 4 時,在編譯時會對數組做內存優化,程序啟動時在棧區初始化數組,我們在使用數組類型時,也可以注意一下這一點。ySA28資訊網——每日最新資訊28at.com

使用數組下標訪問數組中的元素時,越界訪問,在編譯時會報錯。但是,如果我們使用變量 arr[i] 作為數組下標訪問數組中的元素,在編譯時無法檢查是否越界訪問,在運行時會引發 panic。ySA28資訊網——每日最新資訊28at.com

示例代碼:ySA28資訊網——每日最新資訊28at.com

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

輸出結果:ySA28資訊網——每日最新資訊28at.com

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

在作為參數傳遞數組類型的變量時,屬于值傳遞,我們在使用數組類型的參數時,要特別注意這一點。ySA28資訊網——每日最新資訊28at.com

示例代碼:ySA28資訊網——每日最新資訊28at.com

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

輸出結果:ySA28資訊網——每日最新資訊28at.com

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

閱讀上面這段代碼,我們可以發現數組在作為參數傳遞時,地址發生變化,可以證明其屬于值傳遞,即分配一塊新內存,將數組的值拷貝到新內存。ySA28資訊網——每日最新資訊28at.com

三、總結

本文我們通過介紹 Go 語言中數組的一些特性,佐證數組在 Go 項目開發中很少使用的原因。ySA28資訊網——每日最新資訊28at.com

主要原因有兩點,一是數組不可以擴容;二是值傳遞,大數組要特別小心,如果無法避免使用大數組,可以使用數組指針。ySA28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-56426-0.htmlGo 語言為什么很少使用數組?

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 在 Go 項目中封裝 AES 加解密客戶端接口

下一篇: 面試官:說說JVM內存整體結構?線程私有還是共享的?

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 桑植县| 浠水县| 安岳县| 托里县| 常熟市| 高平市| 砚山县| 建平县| 凌源市| 绵竹市| 沁源县| 葫芦岛市| 嘉善县| 新郑市| 朝阳县| 鹿泉市| 安国市| 长宁区| 万年县| 东兰县| 依兰县| 夹江县| 巴马| 漳州市| 平乐县| 西藏| 依兰县| 延津县| 广汉市| 八宿县| 隆德县| 凤山市| 大厂| 罗定市| 蒲江县| 洛扎县| 苍山县| 瑞金市| 游戏| 安龙县| 孟津县|