Дано:
- ломтик с заранее известной емкостью
- Емкость и количество фрагментов велики, и будет использовано около 15 МБ памяти, поэтому я не хочу тратить впустую память и хочу сохранить минимальный объем памяти.
- Срез будет обновлен путем удаления первого элемента и добавления нового элемента в конец среза.
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
Он сохраняет емкость, но требует различных вычислений
- итерация среза один раз,
- вызов функции,
- новая переменная для малого времени,
- подрезка в функции диапазона, которая добавляет больше вычислений,
- и т.д.
Есть ли более оптимизированный способ сделать это?