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操作的主要内容,如果未能解决你的问题,请参考以下文章

Go 切片内存分配

1.Go-copy函数sort排序双向链表list操作和双向循环链表

GO切片

Go语言的切片

Go语言专题:go语言切片

Go语言切片