Отличная статья для новичков. Не понял только пример с sync.Pool. Фактически в варианте default не создаются и не удаляются новые структуры данных, в отличие от варианта pool, где, как минимум, генерируется (alloc) новая ссылка на слайс. Поэтому default не может быть медленнее pool. Представленный ниже вариант бенчмарка дает результат уже в пользу варианта default. Есть подозрение, что наблюдаемое замедление связано с особенностями в инициализации глобальных переменных при запуске тестов. Если не прав - поправьте - очень интересно разобраться.
func BenchmarkDefault(b *testing.B) {
var dataDefault = make([]int, 0, 10000)
for i := 0; i < b.N; i++ {
dataDefault = processDefault(dataDefault[:])
}
}
// Классическая работа.
func processDefault(dataDefault []int) []int {
// Некоторая обработка данных.
for i := 0; i < 10000; i++ {
dataDefault = append(dataDefault, i)
}
// Очистка.
return dataDefault[:0]
}
Отличная статья для новичков. Не понял только пример с sync.Pool. Фактически в варианте default не создаются и не удаляются новые структуры данных, в отличие от варианта pool, где, как минимум, генерируется (alloc) новая ссылка на слайс. Поэтому default не может быть медленнее pool. Представленный ниже вариант бенчмарка дает результат уже в пользу варианта default. Есть подозрение, что наблюдаемое замедление связано с особенностями в инициализации глобальных переменных при запуске тестов. Если не прав - поправьте - очень интересно разобраться.