Интерфейс `error`
Часть раздела Основы путешествия по GO на Coddy — урок 103 из 109.
В Go интерфейс error — это встроенный тип, представляющий состояния ошибок. Любой тип, реализующий метод Error(), удовлетворяет этому интерфейсу.
Вот определение интерфейса error:
type error interface {
Error() string
}Создайте пользовательский тип ошибки:
type MyError struct {
Message string
}
func (e MyError) Error() string {
return e.Message
}
func main() {
err := MyError{Message: "something went wrong"}
fmt.Println(err)
}Результат будет следующим:
something went wrongЗадание
ЛегкоВ этом испытании вы будете работать с интерфейсом error языка Go. Вам нужно создать пользовательскую ошибку с помощью функции errors.New() и затем проверить, существует ли ошибка.
В коде уже есть функция, которая возвращает ошибку. Ваша задача — проверить, не является ли ошибка nil, и вывести соответствующее сообщение.
Шпаргалка
Интерфейс error — это встроенный тип, который представляет состояния ошибок. Любой тип, реализующий метод Error(), соответствует этому интерфейсу:
type error interface {
Error() string
}Создание пользовательского типа ошибки:
type MyError struct {
Message string
}
func (e MyError) Error() string {
return e.Message
}
func main() {
err := MyError{Message: "something went wrong"}
fmt.Println(err) // Вывод: something went wrong
}Используйте errors.New() для создания простых ошибок и проверки того, что ошибка не равна nil.
Попробуйте сами
package main
import (
"errors"
"fmt"
)
func main() {
// Эта функция возвращает ошибку
err := generateError()
// TODO: Проверьте, не равен ли err значению nil
// Если err не равен nil, выведите: "Error occurred: " и сообщение об ошибке
// ПОДСКАЗКА: Используйте оператор if, чтобы проверить, что err != nil
// Эта строка выполнится только в том случае, если ошибка не возникла
fmt.Println("Program completed successfully")
}
// Эта функция генерирует ошибку
func generateError() error {
return errors.New("something went wrong")
}В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы
4Операторы сравнения и логические операторы
Операторы сравнения — Часть 1Операторы сравнения — Часть 2Логический оператор ANDЛогический оператор ORЛогический оператор NOTОсновы приоритета операторовИтоги: выполнение сравнений7Управляющие конструкции: Циклы
Что такое цикл `for`Цикл `for` — основыЦикл `for` — только условиеКлючевое слово `break`Ключевое слово `continue`Вложенные циклыИтоги — повторение действий2Переменные и базовые типы данных
Что такое переменнаяВывод типов с помощью `:=`Целые числа (int)Числа с плавающей точкойЛогический тип (Booleans)СтрокиНулевые значения (Zero Values)КонстантыПравила именованияИтоги: переменные и типы5Основы ввода-вывода
Форматированный выводСпецификаторы форматаВывод типовБазовый ввод данных пользователемИтоги: ввод и вывод8Функции
Понимание функцийОбъявление функцииВызов функцийПараметры функцииВозврат одного значенияВозврат нескольких значенийИменованные возвращаемые значенияОсновы области видимости функцийИтоги — создание переиспользуемого кода11Составные типы: Срезы
Введение в срезыОбъявление литералов срезовСоздание срезов с помощью `make`Длина и емкость срезаДоступ к элементам срезаДобавление элементовПолучение срезов из существующих срезов/массивовИтерация по срезамКопирование срезовИтоги: Динамические списки14Основы обработки ошибок
Концепция ошибокИнтерфейс `error`Функции, возвращающие ошибкиПроверка ошибокСоздание простых ошибокСоздание форматированных ошибокОсновы обработки ошибокИтоги — решение проблем3Базовые операторы
Арифметические операторыОператор деленияОператор остатка от деленияОператор присваиванияКомбинированные операторы присваиванияИнкремент и декрементПовторение — Вычисления6Управление потоком: Условные конструкции
Оператор `if`Ключевое слово `else`Ключевое слово `else if`Затенение переменных в `if`Инициализация переменныхОператор `switch`Switch с выражениямиSwitch без выраженийКлючевое слово `fallthrough`Итоги — Принятие решений