日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

Go 语言为什么很少使用数组?

發布時間:2024/1/2 windows 35 coder
生活随笔 收集整理的這篇文章主要介紹了 Go 语言为什么很少使用数组? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是 frank,「Golang 語言開發棧」公眾號作者。

01 介紹

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

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

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

02 數組

聲明方式

在 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]

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

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

數組的特性

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

數組的長度和類型共同決定數組的類型,例如 var arr1 [2]intvar 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]

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

03 總結

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

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

總結

以上是生活随笔為你收集整理的Go 语言为什么很少使用数组?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。