Правильная обработка ошибок, когда ни один объект не найден - PullRequest
0 голосов
/ 27 марта 2019

Я пишу приложение Go, в котором есть пакет базы данных.Теперь в пакете базы данных есть пара методов, которые вы можете вызвать для получения сущности, основанной на некоторых полях.

Мне было интересно, как лучше всего обрабатывать ошибки в Go, когда сущность не найдена.Должен ли я возвращать ошибки в моем собственном пакете базы данных или возвращать nil в качестве значения?

Я знаю, что хранилище данных Google возвращает ошибку, когда ни один объект не найден.

Сейчас я использую gorm ион также возвращает ошибку, когда объект не найден.

Мне интересно, что вы можете просто вернуть nil в качестве значения вместо возврата ошибки.Я пропускаю точку?

Ответы [ 2 ]

0 голосов
/ 27 марта 2019

Вы можете использовать этот код:

  user:=&User{}
  if db.First(&user, "username=?", mobile).RecordNotFound() {
     return nil
  }
  return user
0 голосов
/ 27 марта 2019

Если вы используете gorm, для этого есть специальная функция;а именно,

// IsRecordNotFoundError returns true if error contains a RecordNotFound error
func IsRecordNotFoundError(err error) bool {}

Вы можете использовать его следующим образом:

err = db.Find(object).Error
if err != nil {
    if gorm.IsRecordNotFoundError(err) {
        // handle object not found
    } else {
        return err
    }
}

и для вашего вопроса:

Мне интересно, вы можете просто вернуть нольв качестве значения вместо возврата ошибки

Это действительно зависит от вашего дизайна;поэтому, если вы хотите разделить слой базы данных, вам все равно следует информировать пользователя об этой ошибке, используя ваш собственный экспортированный тип ошибки, и позволить ему обрабатывать его по своему усмотрению.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...