首頁  >  文章  >  後端開發  >  go語言中切片怎麼加元素

go語言中切片怎麼加元素

青灯夜游
青灯夜游原創
2023-01-10 14:06:123034瀏覽

在go語言中,可以使用append()為切片動態加入元素。 append()可以在一個切片中追加一個元素、多個元素、新的切片,語法「append(切片, 元素1,元素2...)」或「append(切片,新切片...)」。使用append()函數為切片動態添加元素時,如果空間不足以容納足夠多的元素,切片就會進行“擴容”,此時新切片的長度會改變。

go語言中切片怎麼加元素

本教學操作環境:windows7系統、GO 1.18版本、Dell G3電腦。

在go語言中,可以使用append()為切片動態新增元素。

Go語言append()函數

#append可以追加一個元素、多個元素、新的切片

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

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

切片在擴充時,容量的擴充法則是依容量的2 倍數進行擴充,例如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)
}

程式碼輸出如下:

go語言中切片怎麼加元素

程式碼說明如下:

  • 第1 行,宣告一個整數切片。

  • 第 4 行,循環將 10 個數新增至 numbers 切片。

  • 第5 行,列印輸出切片的長度、容量和指標變化,使用函數len() 查看切片擁有的元素個數,並使用函數cap() 查看切片的容量。 。

透過檢視程式碼輸出,可以發現一個有趣的法則:切片長度 len 並不等於切片的容量 cap。

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

  • 員工和工位就是切片中的元素。

  • 辦公室地就是分配好的記憶體。

  • 搬家就是重新分配記憶體。

  • 無論搬多少次家,公司名稱始終不會改變,代表外部使用切片的變數名稱不會修改。

  • 由於搬家後地址發生變化,因此記憶體「位址」也會有修改。

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

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

在切片開頭添加元素一般都會導致內存的重新分配,而且會導致已有元素全部被複製1 次,因此,從切片的開頭添加元素的效能比從尾部追加元素的效能差很多。

因為append 函數傳回新切片的特性,所以切片也支援鍊式操作,我們可以將多個append 操作組合起來,實現在切片中間插入元素:

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 呼叫都會建立一個臨時切片,並將a[i:] 的內容複製到新建立的切片中,然後將暫時建立的切片再追加到a[:i] 中。

【相關推薦:Go影片教學程式設計教學

以上是go語言中切片怎麼加元素的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn