精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Go切片的內部實現

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

切片

Go中提供了一種靈活,功能強悍的內置類型Slices切片(“動態數組"),與數組相比切片的長度是不固定的,可以追加元素,在追加時可能使切片的容量增大。

切片中有兩個概念:一是len長度,二是cap容量,長度是指已經被賦過值的最大下標+1,可通過內置函數len()獲得。

容量是指切片目前可容納的最多元素個數,可通過內置函數cap()獲得。切片是引用類型,因此在當傳遞切片時將引用同一指針,修改值將會影響其他的對象。

s := []int {1,2,3 }            //直接初始化切片

s := arr[:]                    //用數組初始化切片

s = make([]int, 3)             //make初始化,有3個元素的切片, len和cap都為3

s = make([]int, 2, 3)          //make初始化,有2個元素的切片, len為2, cap為3

a = append(a, 1)               // 追加1個元素

a = append(a, 1, 2, 3)         // 追加多個元素, 手寫解包方式

a = append(a, []int{1,2,3}...) // 追加一個切片, 切片需要解包

不過要注意的是,在容量不足的情況下,append的操作會導致重新分配內存,可能導致巨大的內存分配和復制數據代價。

a = append([]int{0}, a...) 切片頭部添加元素。在開頭一般都會導致內存的重新分配,而且會導致已有的元素全部復制1次。

因此,從切片的開頭添加元素的性能一般要比從尾部追加元素的性能差很多。

//切片是地址傳遞
func updateSlice(a []int) {
     a[0] = 3
}

func main() {
     //切片
     var a = []int{1, 2, 3}
     c := make([]int, 5)
     copy(c, a)

     updateSlice(c)
     fmt.Println(c)
}
打印
[3 2 3 0 0]

切片的內部實現

切片是一個很小的對象,它對底層的數組(內部是通過數組保存數據的)進行了抽象,并提供相關的操作方法。

切片是一個有三個字段的數據結構,這些數據結構包含 Golang 需要操作底層數組的元數據:

圖片

這 3 個字段分別是指向底層數組的指針、切片訪問的元素的個數(即長度)和切片允許增長到的元素個數(即容量)。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40095
  • 數組
    +關注

    關注

    1

    文章

    416

    瀏覽量

    25912
  • 切片
    +關注

    關注

    1

    文章

    22

    瀏覽量

    8441
收藏 人收藏

    評論

    相關推薦

    #硬聲創作季 Go核心編程_使用切片的區別分析

    編程語言go語言
    Mr_haohao
    發布于 :2022年09月11日 18:05:54

    請問BGA封裝如何切片

    請問BGA封裝如何切片?是帶芯片一起切片用顯微鏡觀察錫球情況嗎?是否有自動切片,精度如何?有看到板廠給的異常板切片報告說手工切片具有不確定性
    發表于 12-04 22:06

    怎么獲得不同FPGA系列的等效切片計數

    大家好,我在Artix-7設備上實現了一個圖像處理系統。我通過使用ISE工具生成的發布位置和路徑報告,根據占用的切片計算了設計的資源消耗。現在我需要將我設計的資源消耗(占用切片)與其他一些設計進行
    發表于 04-29 13:40

    如何實現一個使用V5上至少80%可用切片的設計

    你好,我必須實現一個使用V5上至少80%可用切片的設計。實現它的最佳方法是什么?是否有可用的示例設計使用80%或更多的邏輯?切片數量切片LU
    發表于 06-17 14:22

    芯片漏電點FIB切片分析

    失效分析,很多時候都需要做FIB-SEM測試,相信各位電子行業的朋友并不陌生, 大家都知道用聚焦離子束FIB切片芯片,解剖芯片內部結構 查找芯片失效點分析,再做進一步分析。今天,邵工給大家分享一下
    發表于 08-05 12:11

    PCB切片的分類及作用介紹

    切片分析主要用于檢查PCB內部走線厚度、層數,通孔孔徑大小,通孔質量觀察,用于檢查PCBA焊點內部空洞,界面結合狀況,潤濕質量評價等等。切片分析是進行PCB/PCBA失效分析的重要技術
    的頭像 發表于 05-17 14:53 ?1.1w次閱讀

    dubbo-go 中的 TPS Limit 設計與實現

    則是 Dubbo 的 Go 語言實現。 最近在 dubbo-go 的 todo list 上發現,它還沒有實現 TPS Limit 的模塊,于是就抽空
    發表于 03-17 15:27 ?633次閱讀

    中國移完成了DNN在內的完整切片以及多種智能終端切片設計實現方案

    切片白皮書》。白皮書發布旨在匯聚產業各方資源,共商提速5G切片端到端商用推進計劃,早日實現5G切片規模商用,最終實現5G產業與個人消費領域、
    的頭像 發表于 10-16 10:27 ?4107次閱讀

    網絡切片的分類 網絡切片粒度如何選擇

    網絡切片是一種按需組網的方式,可以讓運營商在統一的基礎設施上分離出多個虛擬的端到端網絡,每個網絡切片從無線接入網承載網再到核心網上進行邏輯隔離,以適配各種各樣類型的應用。 網絡切片的分類 1、獨立
    的頭像 發表于 09-03 17:01 ?3606次閱讀

    PCB電路板切片的分析

    目的:? 電路板品質的好壞、問題的發生與解決、制程改進的評估,在都需要切片做為客觀檢查、研究與判斷的根據。切片質量的好壞,對結果的判定影響很大。? 切片分析主要用于檢查PCB內部走線厚
    發表于 10-19 15:28 ?9869次閱讀
    PCB電路板<b class='flag-5'>切片</b>的分析

    Go并發模型的實現原理

    Go語言是為并發而生的語言,Go語言是為數不多的在語言層面實現并發的語言;也正是Go語言的并發特性,吸引了全球無數的開發者。
    的頭像 發表于 04-15 08:49 ?1362次閱讀

    朋也社區Go版本Go實現的社區系統

    ./oschina_soft/pybbs-go.zip
    發表于 06-10 14:32 ?0次下載
    朋也社區<b class='flag-5'>Go</b>版本<b class='flag-5'>Go</b><b class='flag-5'>實現</b>的社區系統

    5G 網絡切片之OTN切片和FlexE切片區別

    5G 網絡切片本質上是一個 E2E 概念,將用戶設備連接到租戶特定的應用程序。E2E 網絡切片由RAN 切片、核心切片和傳輸切片組成。每個網
    發表于 01-04 11:56 ?3781次閱讀

    如何實現端到端網絡切片

    3GPP將網絡切片定義為5G 網絡的主要功能之一,網絡切片可看作是動態創建的邏輯端到端網絡。在深入研究網絡切片的概念之前,我們先簡單回顧下 5G 的三大應用場景。
    發表于 06-15 17:56 ?1612次閱讀
    如何<b class='flag-5'>實現</b>端到端網絡<b class='flag-5'>切片</b>?

    golang通過切片創建新的切片

    通過切片創建新的切片 切片之所以被稱為切片,是因為創建一個新的切片,也就是把底層數組切出一部分。通過切片
    的頭像 發表于 10-09 09:48 ?689次閱讀
    golang通過<b class='flag-5'>切片</b>創建新的<b class='flag-5'>切片</b>