您的位置:首页 > 移动开发

Go语言小知识之append()函数

2017-04-13 17:11 267 查看
内置的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语言