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

當(dāng)前位置:首頁(yè) > 科技  > 軟件

Go 語(yǔ)言為什么很少使用數(shù)組?

來(lái)源: 責(zé)編: 時(shí)間:2024-01-02 17:28:35 274觀看
導(dǎo)讀一、介紹在 Go 語(yǔ)言中,數(shù)組是一塊連續(xù)的內(nèi)存,數(shù)組不可以擴(kuò)容,數(shù)組在作為參數(shù)傳遞時(shí),屬于值傳遞。數(shù)組的長(zhǎng)度和類(lèi)型共同決定數(shù)組的類(lèi)型,不同類(lèi)型的數(shù)組之間不可以比較,否則在編譯時(shí)會(huì)報(bào)錯(cuò)。因?yàn)閿?shù)組的一些特性,我們?cè)?Go 項(xiàng)目

一、介紹

在 Go 語(yǔ)言中,數(shù)組是一塊連續(xù)的內(nèi)存,數(shù)組不可以擴(kuò)容,數(shù)組在作為參數(shù)傳遞時(shí),屬于值傳遞。aXU28資訊網(wǎng)——每日最新資訊28at.com

數(shù)組的長(zhǎng)度和類(lèi)型共同決定數(shù)組的類(lèi)型,不同類(lèi)型的數(shù)組之間不可以比較,否則在編譯時(shí)會(huì)報(bào)錯(cuò)。aXU28資訊網(wǎng)——每日最新資訊28at.com

因?yàn)閿?shù)組的一些特性,我們?cè)?Go 項(xiàng)目開(kāi)發(fā)中,很少使用數(shù)組。本文我們介紹一下數(shù)組的特性。aXU28資訊網(wǎng)——每日最新資訊28at.com

aXU28資訊網(wǎng)——每日最新資訊28at.com

二、數(shù)組

1.聲明方式

在 Go 語(yǔ)言中,數(shù)組的聲明方式有三種。aXU28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:aXU28資訊網(wǎng)——每日最新資訊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)}

輸出結(jié)果:aXU28資訊網(wǎng)——每日最新資訊28at.com

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

閱讀上面這段代碼,我們使用三種方式聲明數(shù)組,其中 arr1 和 arr2 的區(qū)別是,arr1 在聲明時(shí)沒(méi)有為數(shù)組賦值,所以輸出結(jié)果是類(lèi)型零值 [0 0]。aXU28資訊網(wǎng)——每日最新資訊28at.com

需要注意的是,arr3 沒(méi)有指定數(shù)組的長(zhǎng)度,而是使用 [...] 替代,這實(shí)際上是 Go 語(yǔ)言中聲明數(shù)組的語(yǔ)法糖,編譯時(shí)通過(guò)數(shù)組的賦值,自動(dòng)推斷數(shù)組的長(zhǎng)度,我們可以使用內(nèi)置函數(shù) len() 查詢(xún)數(shù)組的長(zhǎng)度。aXU28資訊網(wǎng)——每日最新資訊28at.com

2.數(shù)組的特性

在了解完數(shù)組的聲明方式之后,我們?cè)賮?lái)介紹一下數(shù)組具有哪些特性。aXU28資訊網(wǎng)——每日最新資訊28at.com

數(shù)組的長(zhǎng)度和類(lèi)型共同決定數(shù)組的類(lèi)型,例如 var arr1 [2]int 和 var arr2 [3]int 是不同的類(lèi)型。并且不同類(lèi)型的數(shù)組之間是不可以比較的。因?yàn)閿?shù)組的長(zhǎng)度是指定的,所以數(shù)組也不可以擴(kuò)容。aXU28資訊網(wǎng)——每日最新資訊28at.com

如果數(shù)組長(zhǎng)度小于等于 4 時(shí),在編譯時(shí)會(huì)對(duì)數(shù)組做內(nèi)存優(yōu)化,程序啟動(dòng)時(shí)在棧區(qū)初始化數(shù)組,我們?cè)谑褂脭?shù)組類(lèi)型時(shí),也可以注意一下這一點(diǎn)。aXU28資訊網(wǎng)——每日最新資訊28at.com

使用數(shù)組下標(biāo)訪問(wèn)數(shù)組中的元素時(shí),越界訪問(wèn),在編譯時(shí)會(huì)報(bào)錯(cuò)。但是,如果我們使用變量 arr[i] 作為數(shù)組下標(biāo)訪問(wèn)數(shù)組中的元素,在編譯時(shí)無(wú)法檢查是否越界訪問(wèn),在運(yùn)行時(shí)會(huì)引發(fā) panic。aXU28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:aXU28資訊網(wǎng)——每日最新資訊28at.com

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

輸出結(jié)果:aXU28資訊網(wǎng)——每日最新資訊28at.com

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

在作為參數(shù)傳遞數(shù)組類(lèi)型的變量時(shí),屬于值傳遞,我們?cè)谑褂脭?shù)組類(lèi)型的參數(shù)時(shí),要特別注意這一點(diǎn)。aXU28資訊網(wǎng)——每日最新資訊28at.com

示例代碼:aXU28資訊網(wǎng)——每日最新資訊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)}

輸出結(jié)果:aXU28資訊網(wǎng)——每日最新資訊28at.com

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

閱讀上面這段代碼,我們可以發(fā)現(xiàn)數(shù)組在作為參數(shù)傳遞時(shí),地址發(fā)生變化,可以證明其屬于值傳遞,即分配一塊新內(nèi)存,將數(shù)組的值拷貝到新內(nèi)存。aXU28資訊網(wǎng)——每日最新資訊28at.com

三、總結(jié)

本文我們通過(guò)介紹 Go 語(yǔ)言中數(shù)組的一些特性,佐證數(shù)組在 Go 項(xiàng)目開(kāi)發(fā)中很少使用的原因。aXU28資訊網(wǎng)——每日最新資訊28at.com

主要原因有兩點(diǎn),一是數(shù)組不可以擴(kuò)容;二是值傳遞,大數(shù)組要特別小心,如果無(wú)法避免使用大數(shù)組,可以使用數(shù)組指針。aXU28資訊網(wǎng)——每日最新資訊28at.com

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

聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com

上一篇: 在 Go 項(xiàng)目中封裝 AES 加解密客戶(hù)端接口

下一篇: 面試官:說(shuō)說(shuō)JVM內(nèi)存整體結(jié)構(gòu)?線程私有還是共享的?

標(biāo)簽:
  • 熱門(mén)焦點(diǎn)
Top 主站蜘蛛池模板: 鹤庆县| 林甸县| 集安市| 扎囊县| 都昌县| 古蔺县| 嵊泗县| 普格县| 东方市| 贵南县| 琼海市| 迁西县| 陆丰市| 瑞丽市| 鲜城| 泉州市| 蒲城县| 沁水县| 潍坊市| 炉霍县| 资阳市| 紫金县| 美姑县| 陆河县| 浮梁县| 开封市| 方正县| 神池县| 宾阳县| 民权县| 遂昌县| 武功县| 泰安市| 城市| 榕江县| 天祝| 襄城县| 司法| 寿宁县| 仁寿县| 宣武区|