Ошибки как значения: почему в Go нет исключений
Программисты, приходящие из Python или Java, первым делом спотыкаются об это: в Go нет try/catch. Ошибка — это обычное значение, которое функция возвращает наравне с результатом.
f, err := os.Open("data.txt")
if err != nil {
return fmt.Errorf("открыть файл: %w", err)
}
defer f.Close()Оборачивание через %w
Глагол %w в fmt.Errorf сохраняет исходную ошибку в цепочке. Потом её можно достать через errors.Is и errors.As — это заменяет привычную иерархию исключений.
Да, if err != nil встречается на каждом шагу. Но взамен вы всегда видите, где именно может что-то пойти не так — путь ошибки виден прямо в коде, а не спрятан в невидимом стеке исключений.