0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

golan共享底層數(shù)組的切片

麥辣雞腿堡 ? 來源:盼盼編程 ? 作者:盼盼編程 ? 2023-10-09 09:56 ? 次閱讀

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)      // 使用 make 創(chuàng)建空的整型切片

num := []int{}             // 使用切片字面量創(chuàng)建空的整型切片

空切片的底層數(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 的元素
// 同時(shí)也修改了原切片 num 的索引為 2 的元素
myNum[1] = 35

把 35 賦值給 myNum 索引為 1 的元素的同時(shí)也是在修改 num 索引為 2 的元素:

圖片

切片只能訪問到其長度內(nèi)的元素

切片只能訪問到其長度內(nèi)的元素,試圖訪問超出其長度的元素將會(huì)導(dǎo)致語言運(yùn)行時(shí)異常。在使用這部分元素前,必須將其合并到切片的長度里。下面的代碼試圖為 num 中的元素賦值:

// 修改 newNum 索引為 3 的元素
// 這個(gè)元素對(duì)于 newNum 來說并不存在
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)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    569

    瀏覽量

    40072
  • 數(shù)組
    +關(guān)注

    關(guān)注

    1

    文章

    412

    瀏覽量

    25881
  • 切片
    +關(guān)注

    關(guān)注

    1

    文章

    22

    瀏覽量

    8439
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    PCB設(shè)計(jì):層數(shù)設(shè)計(jì)的關(guān)鍵要點(diǎ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 ?1324次閱讀
    PCB設(shè)計(jì):<b class='flag-5'>層數(shù)</b>設(shè)計(jì)的關(guān)鍵要點(diǎn)

    cRIO采集9215數(shù)據(jù)上下位機(jī)之間怎么實(shí)時(shí)傳遞數(shù)據(jù)?共享變量?

    ,這樣就需要將底層采集的數(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

    LabView與通過OPC創(chuàng)建PLC數(shù)組共享變量

    本帖最后由 地圖對(duì)比 于 2020-3-31 13:58 編輯 如題所示:LabView如何與PLC通過OPC建立通訊方式,并且創(chuàng)建數(shù)組共享變量能夠直接與PLC的數(shù)組實(shí)現(xiàn)數(shù)據(jù)的讀寫功能
    發(fā)表于 03-31 13:55

    實(shí)時(shí)修改Vega底層數(shù)據(jù)的新方法及其應(yīng)用

    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無線模塊

    什么是Golan無線模塊  Intel PRO/Wireless 3945ABG Network Connection將包含802.11e服務(wù)質(zhì)量支持,支持VoIP等實(shí)時(shí)應(yīng)用通過無線連接的實(shí)時(shí)傳輸。
    發(fā)表于 01-21 11:15 ?364次閱讀

    PCB切片的分類及作用介紹

    切片分析主要用于檢查PCB內(nèi)部走線厚度、層數(shù),通孔孔徑大小,通孔質(zhì)量觀察,用于檢查PCBA焊點(diǎn)內(nèi)部空洞,界面結(jié)合狀況,潤濕質(zhì)量評(píng)價(jià)等等。切片分析是進(jìn)行PCB/PCBA失效分析的重要技術(shù),切片
    的頭像 發(fā)表于 05-17 14:53 ?1w次閱讀

    網(wǎng)絡(luò)切片的分類 網(wǎng)絡(luò)切片粒度如何選擇

    切片 擁有獨(dú)立功能的切片,包括控制面、用戶面及各種業(yè)務(wù)功能模塊,為特定用戶群提供獨(dú)立的端到端專網(wǎng)服務(wù)或者部分特定功能服務(wù)。 2、共享切片 其資源可供各種獨(dú)立
    的頭像 發(fā)表于 09-03 17:01 ?3577次閱讀

    PCB電路板切片的分析

    目的:? 電路板品質(zhì)的好壞、問題的發(fā)生與解決、制程改進(jìn)的評(píng)估,在都需要切片做為客觀檢查、研究與判斷的根據(jù)。切片質(zhì)量的好壞,對(duì)結(jié)果的判定影響很大。? 切片分析主要用于檢查PCB內(nèi)部走線厚度、層數(shù)
    發(fā)表于 10-19 15:28 ?9685次閱讀
    PCB電路板<b class='flag-5'>切片</b>的分析

    底層數(shù)據(jù)庫是什么

    底層數(shù)據(jù)庫系統(tǒng)原理
    發(fā)表于 01-11 14:25 ?0次下載

    SystemVerilog中數(shù)組的賦值、索引和切片

    數(shù)組可以作為參數(shù)傳遞給子程序,當(dāng)數(shù)組作為值傳遞給子程序時(shí),會(huì)將這個(gè)數(shù)組復(fù)制一份傳遞給子程序。
    的頭像 發(fā)表于 10-20 10:13 ?5101次閱讀

    Go切片的內(nèi)部實(shí)現(xiàn)

    切片 Go中提供了一種靈活,功能強(qiáng)悍的內(nèi)置類型Slices切片(“動(dòng)態(tài)數(shù)組"),與數(shù)組相比切片的長度是不固定的,可以追加元素,在追加時(shí)可能使
    的頭像 發(fā)表于 10-09 09:43 ?513次閱讀
    Go<b class='flag-5'>切片</b>的內(nèi)部實(shí)現(xiàn)

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

    通過切片創(chuàng)建新的切片 切片之所以被稱為切片,是因?yàn)閯?chuàng)建一個(gè)新的切片,也就是把底層數(shù)組切出一部分。
    的頭像 發(fā)表于 10-09 09:48 ?681次閱讀
    golang通過<b class='flag-5'>切片</b>創(chuàng)建新的<b class='flag-5'>切片</b>

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

    切片擴(kuò)容 相對(duì)于數(shù)組而言,使用切片的一個(gè)好處是:可以按需增加切片的容量。 Golang 內(nèi)置的 append() 函數(shù)會(huì)處理增加長度時(shí)的所有操作細(xì)節(jié)。要使用 append() 函數(shù),需
    的頭像 發(fā)表于 10-09 10:01 ?578次閱讀
    <b class='flag-5'>數(shù)組</b>中如何增加<b class='flag-5'>切片</b>的容量

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

    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 ?352次閱讀
    Redis<b class='flag-5'>底層數(shù)</b>據(jù)類型

    redis的五種數(shù)據(jù)類型底層數(shù)據(jù)結(jié)構(gòu)

    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 ?672次閱讀