鉴于:
b = append(b[1:], n)
将增加容量
我写道,为了转移和分配自己
func shiftAndPut(a []int, n int) (b []int) {
b = make([]int, cap(a), cap(a))
for i,v := range(a[1:]) {
b[i] = v
}
b[len(b)-1] = n
return
}
https://play.golang.org/p/7xIBh0UPp2w
它保持容量相同,但需要各种计算
有没有更优化的方法来做到这一点?
切片环缓冲区,自定义实现:
data := make([]int, cap, cap)
pointer := 0
data[pointer] = newData
pointer = (pointer+1) % cap
qazxsw poi包实施:
custom/ring
在评论帖中提出建议后,我在data := ring.New(cap)
data.Value = newData
data = data.Next()
和benchmark之间做了slice custom shifting
custom/ring
使用变量(指针或标志)的自定义切片移位更快,并且还优化了内存。