Да, это идиоматический Go.Поскольку ошибки обрабатываются заранее, ошибка означает, что что-то не удалось, и в результате получается либо nil
, либо, например, возможно, частично записанный буфер, который не нужен.
PS У меня также есть предложение, которое бысделать вещи более идиоматичными.Идиома звучит примерно так: «Отступать блоки ошибок, а не код».В вашем sampleFunction
определенно есть if / else, но в большинстве случаев проверки ошибок (не во всех) вы обрабатываете его и возвращаете, затем пропускаете else и поток просто продолжается.Зачем отступать, когда не нужно?Это позволяет легко читать даже длинные функции, потому что предполагаемый поток функции может быть прочитан сверху вниз и без необходимости отскакивать назад и вперед между блоками if / else.По крайней мере, во многих случаях.
У меня был запрос на внесение изменений в чей-то репозиторий, исправленный, потому что у меня было if / else, где if с return было достаточно.
EDIT Итакмой ответ немного беспокоил меня, и теперь я помню почему.Обычно возвращение не nil
error
обычно указывает на то, что другие возвращаемые значения бесполезны, но действительно есть исключения. Обязательно ознакомьтесь с отдельной документацией.
В качестве конкретного примера см. bytes.Buffer.ReadBytes
Если ReadBytes обнаружит ошибку перед поискомразделитель, он возвращает данные, прочитанные до ошибки, и саму ошибку (часто io.EOF).