Хабр доступен 24/7 благодаря поддержке друзей

Комментарии 6
Жалко что пропозал с улучшением обработки ошибок не прошёл.
Механизм хотя бы как в Расте уже был бы большим шагом вперёд...
func validateUser(id string) error {
...
userInfo, err := db.GetUserInfo(id)
if err != nil {
return errors.As(err, &ErrUserInfo) // уточняем ошибку
}
...
}Ошибка будет, так как errors.As(err, &ErrUserInfo) возвращает true|false.
❌ Избегаем обёртывания без цели
Скрытый текст
// Плохо - создаём информационный шум
func getConfig() (*Config, error) {
data, err := os.ReadFile("config.json")
if err != nil {
return nil, fmt.Errorf("failed to read config: %w", err) // лишняя обёртка
}
// ...
}
// Хорошо - передаём как есть
func getConfig() (*Config, error) {
data, err := os.ReadFile("config.json")
if err != nil {
return nil, err // передаём оригинальную ошибку
}
// ...
}
Я часто видел что так делают, но не понимаю почему - мне кажется что это наоборот неудобно т.к. потом по сообщению ошибки фиг определишь что произошло, особенно если трейс не приложен.
Вот прилетит "failed to start service: EOF" и поди разберись.
Или может быть я не верно истолковал мысль?
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Соглашение по обработке ошибок