成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

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

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

一、介紹

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

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

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

二、數組

1.聲明方式

在 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 的區別是,arr1 在聲明時沒有為數組賦值,所以輸出結果是類型零值 [0 0]。

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

2.數組的特性

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

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

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

使用數組下標訪問數組中的元素時,越界訪問,在編譯時會報錯。但是,如果我們使用變量 arr[i] 作為數組下標訪問數組中的元素,在編譯時無法檢查是否越界訪問,在運行時會引發 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]

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

三、總結

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

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

責任編輯:趙寧寧 來源: Golang語言開發棧
相關推薦

2023-12-27 08:12:04

切片Go語言

2023-03-06 08:01:25

structGo語言

2020-04-07 16:12:56

Go編程語言開發

2012-08-20 09:16:15

Go語言

2023-04-26 07:06:56

CPU主板半導體器件

2016-09-27 21:25:08

Go語言Ken Thompso

2018-05-02 12:34:48

2012-08-13 09:15:54

Go開發語言編程語言

2024-07-08 00:01:00

GPM模型調度器

2022-01-17 16:09:43

Go語言開發

2012-05-19 22:17:30

Android

2012-11-13 10:27:45

PythonGo編程語言

2022-01-10 23:54:56

GoMap并發

2017-08-31 16:22:22

2021-10-13 09:00:19

排序數據集開發

2022-05-24 08:31:05

C語言檢查數組

2023-11-04 16:26:18

C語言數組

2021-08-16 13:44:37

手機電子日本

2021-10-11 13:25:42

語言Go類型

2024-01-15 00:42:55

Go語言應用程序
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产在线视频三区 | 欧美成年网站 | 欧美成人一级 | 亚洲国产精品视频一区 | 久久国产精品久久久久 | 国产精品久久久久久婷婷天堂 | 在线观看免费av网站 | 日韩欧美精品在线播放 | 操操操操操 | 国产精品一区二区三区在线播放 | 国产一级毛片精品完整视频版 | 午夜影院在线观看视频 | 欧美高清视频一区 | 欧美综合在线观看 | 亚洲综合色视频在线观看 | 日韩在线免费 | 一区二区三区免费 | 青青草久久 | 午夜专区 | 91在线精品一区二区 | 99热.com| 91综合网 | 伊人狠狠 | 亚洲狠狠爱 | 99av成人精品国语自产拍 | 99亚洲精品 | 亚洲一区二区三区免费视频 | 中文字幕影院 | 成人中文字幕在线 | 一区日韩| 91伊人 | 久久久亚洲 | 精品在线一区二区 | 国产一区二区三区色淫影院 | 亚洲国产精品va在线看黑人 | 精品1区2区3区 | 精品国产一区二区三区在线观看 | 国产欧美精品一区二区色综合朱莉 | 一级片子 | 日日做夜夜爽毛片麻豆 | 午夜精品网站 |