最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go語言append切片添加元素的實現(xiàn)

 更新時間:2023年04月04日 10:53:15   作者:C語言中文網(wǎng)  
本文主要介紹了Go語言append切片添加元素的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

Go語言的內(nèi)建函數(shù) append() 可以為切片動態(tài)添加元素,代碼如下所示:

var a []int
a = append(a, 1) // 追加1個元素
a = append(a, 1, 2, 3) // 追加多個元素, 手寫解包方式
a = append(a, []int{1,2,3}...) // 追加一個切片, 切片需要解包

不過需要注意的是,在使用 append() 函數(shù)為切片動態(tài)添加元素時,如果空間不足以容納足夠多的元素,切片就會進(jìn)行“擴(kuò)容”,此時新切片的長度會發(fā)生改變。

切片在擴(kuò)容時,容量的擴(kuò)展規(guī)律是按容量的 2 倍數(shù)進(jìn)行擴(kuò)充,例如 1、2、4、8、16……,代碼如下:

var numbers []int
for i := 0; i < 10; i++ {
    numbers = append(numbers, i)
    fmt.Printf("len: %d  cap: %d pointer: %p\n", len(numbers), cap(numbers), numbers)
}

代碼輸出如下:

len: 1  cap: 1 pointer: 0xc0420080e8
len: 2  cap: 2 pointer: 0xc042008150
len: 3  cap: 4 pointer: 0xc04200e320
len: 4  cap: 4 pointer: 0xc04200e320
len: 5  cap: 8 pointer: 0xc04200c200
len: 6  cap: 8 pointer: 0xc04200c200
len: 7  cap: 8 pointer: 0xc04200c200
len: 8  cap: 8 pointer: 0xc04200c200
len: 9  cap: 16 pointer: 0xc042074000
len: 10  cap: 16 pointer: 0xc042074000

代碼說明如下:

  • 第 1 行,聲明一個整型切片。
  • 第 4 行,循環(huán)向 numbers 切片中添加 10 個數(shù)。
  • 第 5 行,打印輸出切片的長度、容量和指針變化,使用函數(shù) len() 查看切片擁有的元素個數(shù),使用函數(shù) cap() 查看切片的容量情況。

通過查看代碼輸出,可以發(fā)現(xiàn)一個有意思的規(guī)律:切片長度 len 并不等于切片的容量 cap。

往一個切片中不斷添加元素的過程,類似于公司搬家,公司發(fā)展初期,資金緊張,人員很少,所以只需要很小的房間即可容納所有的員工,隨著業(yè)務(wù)的拓展和收入的增加就需要擴(kuò)充工位,但是辦公地的大小是固定的,無法改變,因此公司只能選擇搬家,每次搬家就需要將所有的人員轉(zhuǎn)移到新的辦公點(diǎn)。

  • 員工和工位就是切片中的元素。
  • 辦公地就是分配好的內(nèi)存。
  • 搬家就是重新分配內(nèi)存。
  • 無論搬多少次家,公司名稱始終不會變,代表外部使用切片的變量名不會修改。
  • 由于搬家后地址發(fā)生變化,因此內(nèi)存“地址”也會有修改。

除了在切片的尾部追加,我們還可以在切片的開頭添加元素:

var a = []int{1,2,3}
a = append([]int{0}, a...) // 在開頭添加1個元素
a = append([]int{-3,-2,-1}, a...) // 在開頭添加1個切片

在切片開頭添加元素一般都會導(dǎo)致內(nèi)存的重新分配,而且會導(dǎo)致已有元素全部被復(fù)制 1 次,因此,從切片的開頭添加元素的性能要比從尾部追加元素的性能差很多。

因為 append 函數(shù)返回新切片的特性,所以切片也支持鏈?zhǔn)讲僮?,我們可以將多個 append 操作組合起來,實現(xiàn)在切片中間插入元素:

var a []int
a = append(a[:i], append([]int{x}, a[i:]...)...) // 在第i個位置插入x
a = append(a[:i], append([]int{1,2,3}, a[i:]...)...) // 在第i個位置插入切片

每個添加操作中的第二個 append 調(diào)用都會創(chuàng)建一個臨時切片,并將 a[i:] 的內(nèi)容復(fù)制到新創(chuàng)建的切片中,然后將臨時創(chuàng)建的切片再追加到 a[:i] 中。

到此這篇關(guān)于Go語言append切片添加元素的實現(xiàn)的文章就介紹到這了,更多相關(guān)Go語言append切片添加元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Go創(chuàng)建一個包并使用(導(dǎo)入本地包和注意事項)

    Go創(chuàng)建一個包并使用(導(dǎo)入本地包和注意事項)

    有時候需要自己寫一個包方便多次使用,但是在導(dǎo)入自己寫的包時遇到了問題,本文主要介紹了Go創(chuàng)建一個包并使用(導(dǎo)入本地包和注意事項),感興趣的可以了解一下
    2023-11-11
  • 細(xì)細(xì)探究Go 泛型generic設(shè)計

    細(xì)細(xì)探究Go 泛型generic設(shè)計

    這篇文章主要帶大家細(xì)細(xì)探究了Go 泛型generic設(shè)計及示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • Go語言的type?func()用法詳解

    Go語言的type?func()用法詳解

    在Go語言中,函數(shù)的基本組成為:關(guān)鍵字func、函數(shù)名、參數(shù)列表、返回值、函數(shù)體和返回語句,這篇文章主要介紹了Go語言的type?func()用法,需要的朋友可以參考下
    2022-03-03
  • Go channel如何批量讀取數(shù)據(jù)

    Go channel如何批量讀取數(shù)據(jù)

    本文將展示一個從 Go channel 中批量讀取數(shù)據(jù),并批量發(fā)送到 Kafka 和批量寫入網(wǎng)絡(luò)數(shù)據(jù)的示例,文中的示例代碼講解詳細(xì),有需要的可以參考下
    2024-10-10
  • 一文搞懂Go語言標(biāo)準(zhǔn)庫strconv

    一文搞懂Go語言標(biāo)準(zhǔn)庫strconv

    strconv包實現(xiàn)了基本數(shù)據(jù)類型和其字符串表示的相互轉(zhuǎn)換,本文主要介紹Go語言標(biāo)準(zhǔn)庫strconv,想要學(xué)習(xí)strconv標(biāo)準(zhǔn)庫的可以了解一下
    2023-04-04
  • golang實現(xiàn)redis的延時消息隊列功能示例

    golang實現(xiàn)redis的延時消息隊列功能示例

    這篇文章主要介紹了golang實現(xiàn)redis的延時消息隊列功能,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-11-11
  • Golang并發(fā)利器sync.Once的用法詳解

    Golang并發(fā)利器sync.Once的用法詳解

    在某些場景下,我們需要初始化一些資源。有時會采用延遲初始化的方式,在真正需要資源的時候才進(jìn)行初始化。在這種情況下,Go語言中的sync.Once提供一個優(yōu)雅且并發(fā)安全的解決方案,本文將對其進(jìn)行詳細(xì)介紹
    2023-04-04
  • Go語言--切片(Slice)詳解

    Go語言--切片(Slice)詳解

    這篇文章主要介紹了Go語言--切片(Slice),Go 語言切片是對數(shù)組的抽象,下面文章小編將為大家詳細(xì)介紹該內(nèi)容,需要的朋友可以參考下,希望對你有所幫助
    2021-10-10
  • 詳解如何在Golang中執(zhí)行shell命令

    詳解如何在Golang中執(zhí)行shell命令

    這篇文章主要為大家詳細(xì)介紹了在 golang 中執(zhí)行 shell 命令的多種方法和場景,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-02-02
  • Go語言編程入門超級指南

    Go語言編程入門超級指南

    這篇文章主要介紹了Go語言編程的入門指南,包括對Go的變量及函數(shù)的基本介紹,需要的朋友可以參考下
    2016-01-01

最新評論

科技| 子洲县| 炎陵县| 高阳县| 桑日县| 彭阳县| 江永县| 盱眙县| 平罗县| 威远县| 闻喜县| 康保县| 天祝| 巫溪县| 宿迁市| 郴州市| 纳雍县| 西和县| 盐源县| 玉树县| 沙坪坝区| 广西| 化德县| 盐池县| 大余县| 定西市| 岑溪市| 渭源县| 调兵山市| 辉县市| 芦溪县| 建水县| 靖西县| 上饶县| 同江市| 崇阳县| 泰来县| 临沭县| 嘉祥县| 大丰市| 泰州市|