nil 和空切片
有時(shí),程序可能需要聲明一個(gè)值為 nil 的切片(也稱nil切片)。只要在聲明時(shí)不做任何初始化,就會(huì)創(chuàng)建一個(gè) nil 切片。
var num []int
在 Golang 中,nil 切片是很常見(jiàn)的創(chuàng)建切片的方法。nil 切片可以用于很多標(biāo)準(zhǔn)庫(kù)和內(nèi)置函數(shù)。在需要描述一個(gè)不存在的切片時(shí),nil 切片會(huì)很好用。比如,函數(shù)要求返回一個(gè)切片但是發(fā)生異常的時(shí)候。下圖描述了 nil 切片的狀態(tài):
空切片和 nil 切片稍有不同,下面的代碼分別通過(guò) make() 函數(shù)和字面量的方式創(chuàng)建空切片:
num := make([]int, 0) // 使用 make 創(chuàng)建空的整型切片
num := []int{} // 使用切片字面量創(chuàng)建空的整型切片
空切片的底層數(shù)組中包含 0 個(gè)元素,也沒(méi)有分配任何存儲(chǔ)空間。想表示空集合時(shí)空切片很有用,比如,數(shù)據(jù)庫(kù)查詢返回 0 個(gè)查詢結(jié)果時(shí)。
不管是使用 nil 切片還是空切片,對(duì)其調(diào)用內(nèi)置函數(shù) append()、len() 和 cap() 的效果都是一樣的。
共享底層數(shù)組的切片
需要注意的是:現(xiàn)在兩個(gè)切片 num 和 myNum 共享同一個(gè)底層數(shù)組。如果一個(gè)切片修改了該底層數(shù)組的共享部分,另一個(gè)切片也能感知到:
// 修改 myNum 索引為 1 的元素
// 同時(shí)也修改了原切片 num 的索引為 2 的元素
myNum[1] = 35
把 35 賦值給 myNum 索引為 1 的元素的同時(shí)也是在修改 num 索引為 2 的元素:
切片只能訪問(wèn)到其長(zhǎng)度內(nèi)的元素
切片只能訪問(wèn)到其長(zhǎng)度內(nèi)的元素,試圖訪問(wèn)超出其長(zhǎng)度的元素將會(huì)導(dǎo)致語(yǔ)言運(yùn)行時(shí)異常。在使用這部分元素前,必須將其合并到切片的長(zhǎng)度里。下面的代碼試圖為 num 中的元素賦值:
// 修改 newNum 索引為 3 的元素
// 這個(gè)元素對(duì)于 newNum 來(lái)說(shuō)并不存在
newNum[3] = 45
上面的代碼可以通過(guò)編譯,但是會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤:panic: runtime error: index out of range
-
數(shù)據(jù)結(jié)構(gòu)
+關(guān)注
關(guān)注
3文章
573瀏覽量
40752 -
數(shù)組
+關(guān)注
關(guān)注
1文章
420瀏覽量
26553 -
切片
+關(guān)注
關(guān)注
1文章
23瀏覽量
8559
發(fā)布評(píng)論請(qǐng)先 登錄
PCB設(shè)計(jì):層數(shù)設(shè)計(jì)的關(guān)鍵要點(diǎn)

cRIO采集9215數(shù)據(jù)上下位機(jī)之間怎么實(shí)時(shí)傳遞數(shù)據(jù)?共享變量?
LabView與通過(guò)OPC創(chuàng)建PLC數(shù)組的共享變量
實(shí)時(shí)修改Vega底層數(shù)據(jù)的新方法及其應(yīng)用
什么是Golan無(wú)線模塊
PCB切片的分類及作用介紹
網(wǎng)絡(luò)切片的分類 網(wǎng)絡(luò)切片粒度如何選擇
PCB電路板切片的分析

SystemVerilog中數(shù)組的賦值、索引和切片
Go切片的內(nèi)部實(shí)現(xiàn)

golang通過(guò)切片創(chuàng)建新的切片

數(shù)組中如何增加切片的容量

Redis底層數(shù)據(jù)類型

評(píng)論