Обработка ошибок в Go: что это и как создать ошибку
В этой главе ты узнаешь:
-
что значит обработка ошибок в Go;
-
как создать и обработать ошибку;
-
как сократить шаблонный код;
-
как обработать ошибки функций с несколькими возвращаемыми значениями.
Что такое обработка ошибок
Хороший код должен правильно реагировать на непредвиденные обстоятельства, такие как ввод некорректных данных пользователем, разрыв сетевого подключения или отказ дисков.
Обработка ошибок — это процесс обнаружения ситуаций, когда программа находится в неожиданном состоянии, а также принятие мер для записи диагностической информации, которая будет полезна при последующей отладке.
В отличие от других языков программирования, где разработчикам нужно обрабатывать ошибки с помощью специального синтаксиса, ошибки в Go — это значения с интерфейсным типом error, возвращаемые функциями, как и любые другие значения. Для обработки ошибок в Go мы должны проверить ошибки, которые могут возвращать функции, решить, существует ли ошибка, а также принять надлежащие меры для защиты данных и сообщить пользователям или операторам, что произошла ошибка.
Создание ошибок
Прежде чем мы сможем обработать ошибку, нам нужно ее создать. Стандартная библиотека предоставляет две встроенные функции для создания ошибок: errors.New и fmt.Errorf. Обе эти функции позволяют нам указывать настраиваемое сообщение об ошибке, которое ты можешь отображать пользователям.
errors.New получает один аргумент — сообщение об ошибке в виде строки, которую ты можешь настроить, чтобы предупредить пользователей о том, что пошло не так.
Попробуй запустить следующий пример, чтобы увидеть ошибку, созданную с помощью errors.New, которая выполняет стандартный вывод.
Самое время протестировать код!
Мы использовали функцию errors.New из стандартной библиотеки для создания нового сообщения об ошибке со строкой barnacles в качестве сообщения об ошибке. Мы выполняли требование конвенции, используя строчные буквы для сообщения об ошибке, как показано в руководстве по стилю для языка программирования Go.
Наконец, мы использовали функцию fmt.Println для объединения сообщения об ошибке со строкой Sammy says:.
Функция fmt.Errorf позволяет динамически создавать сообщение об ошибке. Ее первый аргумент — это строка, которая содержит сообщение об ошибке с заполнителями, такими как %s для строки и %d для целых чисел. fmt.Errorf интерполирует аргументы, которые находятся за этой форматированной строкой, на эти заполнители по порядку.
Самое время протестировать код!
Мы использовали функцию fmt.Errorf для создания сообщения об ошибке, которое будет включать текущее время. Форматированная строка, которую мы предоставили fmt.Errorf, содержит директиву форматирования %v, эта директива указывает fmt.Errorf использовать формат по умолчанию для первого аргумента, предоставленного после форматированной строки. Этот аргумент будет текущим временем, предоставленным функцией time.Now из стандартной библиотеки. Как и в предыдущем примере, мы добавляем в сообщение об ошибке короткий префикс и выводим результат стандартным образом, используя fmt.Println.