nil 和空切片
有時(shí),程序可能需要聲明一個(gè)值為 nil 的切片(也稱nil切片)。只要在聲明時(shí)不做任何初始化,就會(huì)創(chuàng)建一個(gè) nil 切片。
var num []int
在 Golang 中,nil 切片是很常見的創(chuàng)建切片的方法。nil 切片可以用于很多標(biāo)準(zhǔn)庫和內(nèi)置函數(shù)。在需要描述一個(gè)不存在的切片時(shí),nil 切片會(huì)很好用。比如,函數(shù)要求返回一個(gè)切片但是發(fā)生異常的時(shí)候。下圖描述了 nil 切片的狀態(tài):
空切片和 nil 切片稍有不同,下面的代碼分別通過 make() 函數(shù)和字面量的方式創(chuàng)建空切片:
num := make([]int, 0)
num := []int{}
空切片的底層數(shù)組中包含 0 個(gè)元素,也沒有分配任何存儲(chǔ)空間。想表示空集合時(shí)空切片很有用,比如,數(shù)據(jù)庫查詢返回 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] = 35
把 35 賦值給 myNum 索引為 1 的元素的同時(shí)也是在修改 num 索引為 2 的元素:
切片只能訪問到其長(zhǎng)度內(nèi)的元素
切片只能訪問到其長(zhǎng)度內(nèi)的元素,試圖訪問超出其長(zhǎng)度的元素將會(huì)導(dǎo)致語言運(yùn)行時(shí)異常。在使用這部分元素前,必須將其合并到切片的長(zhǎng)度里。下面的代碼試圖為 num 中的元素賦值:
newNum[3] = 45
上面的代碼可以通過編譯,但是會(huì)產(chǎn)生運(yùn)行時(shí)錯(cuò)誤:panic: runtime error: index out of range
聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。
舉報(bào)投訴
-
數(shù)據(jù)結(jié)構(gòu)
-
數(shù)組
-
切片
相關(guān)推薦
在PCB的EMC設(shè)計(jì)考慮中,首先涉及的便是層的設(shè)置;單板的層數(shù)由電源、地的層數(shù)和信號(hào)層數(shù)組成;電源層、地層、信號(hào)層的相對(duì)位置以及電源、地平面的分割對(duì)單板的EMC指標(biāo)至關(guān)重要。
發(fā)表于 11-22 09:28
?1432次閱讀
,這樣就需要將底層采集的數(shù)據(jù)實(shí)時(shí)進(jìn)行處理,但是我通過共享變量的方式進(jìn)行處理的時(shí)候發(fā)現(xiàn)的問題:1,共享變量設(shè)置為網(wǎng)絡(luò)共享變量,數(shù)據(jù)類型為數(shù)組,
發(fā)表于 01-05 14:01
本帖最后由 地圖對(duì)比 于 2020-3-31 13:58 編輯
如題所示:LabView如何與PLC通過OPC建立通訊方式,并且創(chuàng)建數(shù)組共享變量能夠直接與PLC的數(shù)組實(shí)現(xiàn)數(shù)據(jù)的讀寫功能
發(fā)表于 03-31 13:55
Vega提供了擴(kuò)充自定義模塊的功能。實(shí)現(xiàn)擴(kuò)充的動(dòng)態(tài)性通常只要在運(yùn)行前設(shè)置其運(yùn)動(dòng)屬性即可,而實(shí)現(xiàn)動(dòng)態(tài)地形必須實(shí)時(shí)修改底層數(shù)據(jù)。該文提出一種修改Vega底層數(shù)據(jù)的方法,為Vega
發(fā)表于 04-18 10:14
?13次下載
什么是Golan無線模塊
Intel PRO/Wireless 3945ABG Network Connection將包含802.11e服務(wù)質(zhì)量支持,支持VoIP等實(shí)時(shí)應(yīng)用通過無線連接的實(shí)時(shí)傳輸。
發(fā)表于 01-21 11:15
?369次閱讀
切片分析主要用于檢查PCB內(nèi)部走線厚度、層數(shù),通孔孔徑大小,通孔質(zhì)量觀察,用于檢查PCBA焊點(diǎn)內(nèi)部空洞,界面結(jié)合狀況,潤(rùn)濕質(zhì)量評(píng)價(jià)等等。切片分析是進(jìn)行PCB/PCBA失效分析的重要技術(shù),切片
發(fā)表于 05-17 14:53
?1.1w次閱讀
切片 擁有獨(dú)立功能的切片,包括控制面、用戶面及各種業(yè)務(wù)功能模塊,為特定用戶群提供獨(dú)立的端到端專網(wǎng)服務(wù)或者部分特定功能服務(wù)。 2、共享切片 其資源可供各種獨(dú)立
發(fā)表于 09-03 17:01
?3662次閱讀
目的:? 電路板品質(zhì)的好壞、問題的發(fā)生與解決、制程改進(jìn)的評(píng)估,在都需要切片做為客觀檢查、研究與判斷的根據(jù)。切片質(zhì)量的好壞,對(duì)結(jié)果的判定影響很大。? 切片分析主要用于檢查PCB內(nèi)部走線厚度、層數(shù)
發(fā)表于 10-19 15:28
?1w次閱讀
底層數(shù)據(jù)庫系統(tǒng)原理
發(fā)表于 01-11 14:25
?0次下載
數(shù)組可以作為參數(shù)傳遞給子程序,當(dāng)數(shù)組作為值傳遞給子程序時(shí),會(huì)將這個(gè)數(shù)組復(fù)制一份傳遞給子程序。
發(fā)表于 10-20 10:13
?5338次閱讀
切片 Go中提供了一種靈活,功能強(qiáng)悍的內(nèi)置類型Slices切片(“動(dòng)態(tài)數(shù)組"),與數(shù)組相比切片的長(zhǎng)度是不固定的,可以追加元素,在追加時(shí)可能使
發(fā)表于 10-09 09:43
?557次閱讀
通過切片創(chuàng)建新的切片 切片之所以被稱為切片,是因?yàn)閯?chuàng)建一個(gè)新的切片,也就是把底層數(shù)組切出一部分。
發(fā)表于 10-09 09:48
?717次閱讀
切片擴(kuò)容 相對(duì)于數(shù)組而言,使用切片的一個(gè)好處是:可以按需增加切片的容量。 Golang 內(nèi)置的 append() 函數(shù)會(huì)處理增加長(zhǎng)度時(shí)的所有操作細(xì)節(jié)。要使用 append() 函數(shù),需
發(fā)表于 10-09 10:01
?612次閱讀
1. 前言 Redis的鍵值對(duì)中的常見數(shù)據(jù)類型有String (字符串)、List(列表)、Hash(哈希)、Set(集合)、Zset(有序集合)。那么其對(duì)應(yīng)的底層數(shù)據(jù)結(jié)構(gòu)有SDS(simple
發(fā)表于 10-09 14:05
?391次閱讀
Redis是一種內(nèi)存數(shù)據(jù)存儲(chǔ)系統(tǒng),支持多種數(shù)據(jù)結(jié)構(gòu)。這些數(shù)據(jù)結(jié)構(gòu)不僅可以滿足常見的存儲(chǔ)需求,還能夠通過其底層數(shù)據(jù)結(jié)構(gòu)提供高效的操作和查詢。以下是Redis中常用的五種數(shù)據(jù)類型及其底層數(shù)
發(fā)表于 11-16 11:18
?714次閱讀
評(píng)論