return nil или return err

Две строки в конце функции на Go делают одно и то же: return err и return nil. Но одна из них экономит время тому, кто будет читать ваш код.

Пишу пет-проект - todo на Go, и сегодня разобрался в этой мелочи.

В Go ошибка - обычное значение: функция её возвращает, а не выбрасывает. Если все ошибки проверены выше, к концу функции err пустая. Результат одинаковый. Разница в том, кому придётся это доказывать.

Как у врача. Один говорит: «Анализы в норме». Другой молча отдаёт бланк: может, всё и хорошо, но каждую строку придётся читать самому.

return err в конце - это бланк. Ревьюер идёт вверх по коду и выясняет, где последний раз присвоили err и проверили ли её. return nil - это заключение: всё проверено, дальше только успех.

Есть и практичный довод. Через полгода коллега допишет вызов и забудет проверить ошибку. С return nil линтер сразу покажет: значение err получено и не прочитано. С return err он промолчит, а ошибка всплывёт в конце функции, далеко от места, где случилась.

Правило, которое я для себя вынес: ошибку обработал сразу - и вышел. Успешный путь идёт прямо вниз, а в конце звучит «здоров».

Как у вас в команде: есть договорённость на этот счёт или на вкус автора?

#golang #go #backend