Какие знаешь виды работы с ошибками в Go

«Какие знаешь виды работы с ошибками в Go» — вопрос из категории Golang, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go есть несколько подходов к обработке ошибок:

  1. Возврат ошибки как второго значения (стандартный способ):
result, err := someFunction()
if err != nil {
    // обработка ошибки
}
  1. Собственные типы ошибок через errors.New() или fmt.Errorf():
err := errors.New("something went wrong")
err = fmt.Errorf("context: %v", err)
  1. Проверка типа ошибки с errors.Is и errors.As:
if errors.Is(err, os.ErrNotExist) {
    // обработка конкретной ошибки
}

var pathError *os.PathError
if errors.As(err, &pathError) {
    // доступ к полям кастомной ошибки
}
  1. Паника и восстановление (только для критических ошибок):
defer func() {
    if r := recover(); r != nil {
        // обработка паники
    }
}()
panic("critical error")
  1. Обертки ошибок (с добавлением контекста):
if err != nil {
    return fmt.Errorf("operation failed: %w", err)
}