Расскажите о своем опыте проведения code review.

Ответ

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

При проверке кода я обращаю внимание на следующие аспекты:

  1. Корректность и логика: Соответствует ли код поставленной задаче, нет ли в нем логических ошибок.
  2. Архитектура и дизайн: Не нарушает ли код общую архитектуру проекта, можно ли его упростить.
  3. Читаемость и стиль: Код должен быть понятным для других разработчиков. Я слежу за соблюдением go fmt и командных соглашений, осмысленностью имен переменных и функций.
  4. Производительность: Анализирую наличие узких мест, неэффективных алгоритмов, лишних аллокаций памяти.
  5. Обработка ошибок: Убеждаюсь, что ошибки не игнорируются (_), а корректно обрабатываются и, при необходимости, оборачиваются для добавления контекста.
  6. Конкурентность: Проверяю на наличие потенциальных race conditions, утечек горутин, правильность использования примитивов синхронизации (мьютексы, каналы).
  7. Безопасность: Ищу потенциальные уязвимости, такие как SQL-инъекции, некорректная обработка пользовательского ввода и т.д.
  8. Тестируемость: Оцениваю, насколько легко написать юнит-тесты для нового кода.

Пример частого замечания (идиоматичный Go):

// Было: классический цикл в стиле C
func processItems(items []string) {
    for i := 0; i < len(items); i++ {
        // do something with items[i]
    }
}

// Стало: использование for-range, что более идиоматично для Go
// Это не только короче, но и безопаснее (нет риска ошибки в индексе).
func processItems(items []string) {
    for _, item := range items {
        // do something with item
    }
}

Я всегда стараюсь давать конструктивную обратную связь, объясняя причину замечания и предлагая варианты решения.