1. 错误处理

在 Go 语言中,错误处理是很重要的。

Go 语言中鼓励人们在任何 创建方法之后去检查错误。

1.1. 错误处理

由于 GORM 的 链式 API,GORM 中的错误处理与惯用的 Go 代码不同,但它仍然相当容易。

如果发生任何错误,GORM 会将其设置为 * gorm.DBError 字段,你可以这样检查:

  1. if err := db.Where("name = ?", "jinzhu").First(&user).Error; err != nil {
  2. // error handling...
  3. }

或者

  1. if result := db.Where("name = ?", "jinzhu").First(&user); result.Error != nil {
  2. // error handling...
  3. }

1.2. 错误

在处理数据期间,发生几个错误很普遍,GORM 提供了一个 API 来将所有发生的错误作为切片返回

  1. // 如果有多个错误产生,`GetErrors` 返回一个 `[]error`的切片
  2. db.First(&user).Limit(10).Find(&users).GetErrors()
  3. fmt.Println(len(errors))
  4. for _, err := range errors {
  5. fmt.Println(err)
  6. }

1.3. RecordNotFound 错误

GORM 提供了一个处理 RecordNotFound 错误的快捷方式,如果发生了多个错误,它将检查每个错误,如果它们中的任何一个是RecordNotFound 错误。

  1. //检查是否返回 RecordNotFound 错误
  2. db.Where("name = ?", "hello world").First(&user).RecordNotFound()
  3. if db.Model(&user).Related(&credit_card).RecordNotFound() {
  4. // 数据没有找到
  5. }
  6. if err := db.Where("name = ?", "jinzhu").First(&user).Error; gorm.IsRecordNotFoundError(err) {
  7. // 数据没有找到
  8. }