return nil или return err
Две строки в конце функции на Go делают одно и то же: return err и return nil. Но одна из них экономит время тому, кто будет читать ваш код.
Пишу пет-проект - todo на Go, и сегодня разобрался в этой мелочи.
В Go ошибка - обычное значение: функция её возвращает, а не выбрасывает. Если все ошибки проверены выше, к концу функции err пустая. Результат одинаковый. Разница в том, кому придётся это доказывать.
Как у врача. Один говорит: «Анализы в норме». Другой молча отдаёт бланк: может, всё и хорошо, но каждую строку придётся читать самому.
return err в конце - это бланк. Ревьюер идёт вверх по коду и выясняет, где последний раз присвоили err и проверили ли её. return nil - это заключение: всё проверено, дальше только успех.
Есть и практичный довод. Через полгода коллега допишет вызов и забудет проверить ошибку. С return nil линтер сразу покажет: значение err получено и не прочитано. С return err он промолчит, а ошибка всплывёт в конце функции, далеко от места, где случилась.
Правило, которое я для себя вынес: ошибку обработал сразу - и вышел. Успешный путь идёт прямо вниз, а в конце звучит «здоров».
Как у вас в команде: есть договорённость на этот счёт или на вкус автора?