index и по каким причинам?
1)
arr = make([]int, len(data))
for _, value := range data {
arr[i] = value
}
2)
arr = make([]int, 0, len(data))
for _, value := range data {
arr = append(arr, value)
}
второе, кстати, можно записать как arr = append([]int(nil), data…) и это будет слегка быстрее - при такой записи arr не будет заполняться нулями
это не всегда возможно т.к. часто надо конвертировать) arr = append(arr, CustomStruct{field: value.field}), тут уже мы обязаны использовать цикл
Вариант с append медленнее. Имхо, лучше использовать вариант без append чтобы показать что исходный и результирующий слайсы имеют одинаковую длину
https://newbedev.com/golang-slice-append-vs-assign-performance - разницы никакой нет. мы заранее указали размер и компилятор знает, что можно просто скопировать (оптимизации на уровне компилятора)
если структуры будут большие — разница будет заметна
У автора некорректные бенчи. Аллокацию надо вынести за пределы бенча и размер слайса увеличить хотя бы до 4к элементов
Ок, я знаю, что есть такая оптимизация, но с такой пьянкой пойду писать свой бенч, тегну, если не забуду
Обсуждают сегодня