go 切片追加时,避免Copy操作
Posted lishuangquan1987
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了go 切片追加时,避免Copy操作相关的知识,希望对你有一定的参考价值。
参考文章:
https://www.jianshu.com/p/cf243f1061dc
先上代码:
a := []int1, 2, 3
fmt.Println(&a[0])
b := append(a, 4)
fmt.Println(&b[0])
这两个输出值是一样的吗?答案不一样:
发现就追加了一个元素,地址就变了,莫非每次追加,所有的元素都Copy一次?那性能也太低了吧
经过查询,做了如下尝试,发现不是这样的,是我没有给初始容量:
a := make([]int, 0, 1024)
a = append(a, []int1, 2, 3...)
fmt.Println(&a[0])
b := append(a, 4)
fmt.Println(&b[0])
所以以后设置切片时,必要的时候要给初始容量。
以上是关于go 切片追加时,避免Copy操作的主要内容,如果未能解决你的问题,请参考以下文章