Какое место занимают бенчмарки (benchmarks) в процессе сборки и тестирования Go-приложения?

Ответ

Бенчмарки являются частью этапа тестирования и выполняются после компиляции кода. Типичный пайплайн выглядит так:


  1. Статический анализ (Linting): Инструменты вроде go vet или golangci-lint проверяют исходный код на наличие ошибок, стилистических несоответствий и потенциальных проблем. Этот этап работает с исходным кодом, до компиляции.



  2. Сборка (Compilation): Команда go build компилирует исходный код в исполняемый бинарный файл.


  3. Тестирование (Testing): Этот этап запускается командой go test и включает в себя:

    • Юнит-тесты: Проверяют корректность логики. Они выполняются в первую очередь.
    • Бенчмарки: Запускаются с флагом -bench (например, go test -bench .). Они измеряют производительность (скорость выполнения, аллокации памяти) уже скомпилированного кода. Это важно, чтобы на результаты не влияло время самой компиляции.

Таким образом, бенчмарки — это инструмент для измерения производительности, который применяется к скомпилированному приложению на этапе его тестирования.

Пример бенчмарка:

func BenchmarkSum(b *testing.B) {
    // b.N подбирается автоматически для получения статистически значимого результата
    for i := 0; i < b.N; i++ {
        Sum(1, 2)
    }
}