Проверяет понимание разницы между обработкой ошибок и паникой в Go, а также умение выбирать правильную стратегию в зависимости от контекста.
В Go ошибки являются обычным значением, которое возвращается из функций, и их обработка является явной и обязательной. Паника, напротив, представляет собой механизм аварийного завершения программы, который используется для ситуаций, когда программа находится в некорректном состоянии и продолжение работы невозможно. Выбор между этими подходами зависит от того, является ли сбой ожидаемым и может ли вызывающий код восстановиться.
Возврат ошибки предпочтителен в большинстве случаев, особенно когда сбой является частью нормального потока выполнения. Например, при чтении файла, отправке HTTP-запроса или парсинге пользовательского ввода ошибки возникают регулярно, и вызывающий код должен иметь возможность обработать их, например, показать сообщение пользователю или повторить попытку. Возврат ошибки позволяет сохранить контроль над потоком выполнения и избежать неожиданного завершения программы.
func readConfig(path string) ([]byte, error) {
data, err := os.ReadFile(path)
if err != nil {
return nil, fmt.Errorf("read config: %w", err)
}
return data, nil
}
func main() {
data, err := readConfig("config.yaml")
if err != nil {
log.Printf("failed to read config: %v", err)
return
}
// используем data
}Паника уместна в ситуациях, когда программа находится в состоянии, которое невозможно исправить, и продолжение работы приведет к некорректным результатам или повреждению данных. Например, если функция получает аргумент, который нарушает инвариант (например, отрицательный размер буфера), или если программист допустил ошибку, которую невозможно обработать на уровне вызывающего кода. Паника также используется для сигнализации о программных ошибках, которые должны быть исправлены разработчиком, а не обработаны пользователем.
func mustParseDuration(s string) time.Duration {
d, err := time.ParseDuration(s)
if err != nil {
panic(fmt.Sprintf("invalid duration: %v", err))
}
return d
}Возврат ошибки является основным механизмом обработки сбоев в Go и должен использоваться в подавляющем большинстве случаев. Паника предназначена для исключительных ситуаций, когда программа не может продолжать работу корректно. Правильный выбор между ними делает код более надежным, читаемым и тестируемым.
Уровень
Рейтинг:
4
Сложность:
4
Навыки
JavaScript
Node.js
Ключевые слова
Подпишись на Golang Developer в телеграм