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

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

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

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

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

評論