Обновить

Комментарии 6

Жалко что пропозал с улучшением обработки ошибок не прошёл.

Механизм хотя бы как в Расте уже был бы большим шагом вперёд...

Любитесь как хотите с тем что есть. Если я правильно понимаю дзен Go.

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" и поди разберись.

Или может быть я не верно истолковал мысль?

Так я же добивался того, чтобы трейс был приложен и все остальные условия. А пересказывать ошибку - испорченный телефон.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации