Go語言小知識之append()函式
內建的append()函式,給slice追加一個item。如果這個slice還有空閒容量(cap(s) > len(s)
),則直接進行追加。否則,先對slice進行擴容,然後再進行追加。上述這些在append()函式的文件裡有詳細的說明,但是文件並沒有說擴容是如何進行的,所以下面用一段程式碼做一個試驗:
package main
func main() {
s := []int{}; println(cap(s)) // 0
s = appendN(s, 1); println(cap(s)) // 2
s = appendN(s, 2); println(cap(s)) // 4
s = appendN(s, 4); println(cap(s)) // 8
s = appendN(s, 8); println(cap(s)) // 16
s = appendN(s, 16); println(cap(s)) // 32
s = appendN(s, 32); println(cap(s)) // 64
s = appendN(s, 64); println(cap(s)) // 128
s = []int{1,2,3}; println(cap(s)) // 3
s = appendN(s, 2); println(cap(s)) // 8
}
func appendN(s []int, n int) []int {
for i := 0; i < n; i++ {
s = append(s, 0)
}
return s
}
由此可知,(至少就上面的程式碼而言)每次需要擴容的時候,容量並不是簡單增長到足夠容納新的item,而是會被進一步擴充成2n
相關文章
- Go語言小知識之map遍歷Go
- Go 語言函式Go函式
- GO語言————6.1 函式Go函式
- Go 語言 -make函式Go函式
- go語言入門之-函式和方法Go函式
- go語言學習-函式Go函式
- Go語言入門系列(六)之再探函式Go函式
- C語言學習之認識exit()函式C語言函式
- Go語言:包管理基礎知識Go
- go語言學習-基礎知識Go
- 函式 -- 就要學習 Go 語言函式Go
- GO語言————6.5 內建函式Go函式
- GO語言————6.6 遞迴函式Go遞迴函式
- C語言函式知識體系大學霸IT達人C語言函式
- Go語言————1、初識GO語言Go
- 5.go語言函式提綱Go函式
- Go語言核心36講(Go語言基礎知識一)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識二)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識三)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識四)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識五)--學習筆記Go筆記
- Go語言核心36講(Go語言基礎知識六)--學習筆記Go筆記
- 【Go】Go語言學習筆記-2-函式Go筆記函式
- JS小知識——立即執行函式JS函式
- 小白學習Golang(六)Go語言函式Golang函式
- GO語言入門 - (六)函式和方法Go函式
- 語言小知識-Java ArrayList類 深度解析Java
- 語言小知識-Java HashMap類 深度解析JavaHashMap
- 初識go語言Go
- Go語言基礎知識01-用Go打個招呼Go
- Java函數語言程式設計知識分享!Java函數程式設計
- 【Go語言學習】匿名函式與閉包Go函式
- GO語言————6.7 將函式作為引數Go函式
- c語言常用小知識點總結1C語言
- C語言函式手冊:c語言庫函式大全|C語言標準函式庫|c語言常用函式查詢C語言函式
- 計算語言學之預備知識
- 初識Go語言-1Go
- 每天一小段總結Go語言知識Go