【问题标题】:Go tries to handle an error instead of meGo 尝试处理错误而不是我
【发布时间】:2021-08-30 12:33:18
【问题描述】:

我使用 GORM 运行以下代码:

result := db.Where("account_name = ?", config.AccountName).First(&accountRecord) // line 299

    // if there is some error when working with DB
    if result.Error != nil && !errors.Is(result.Error, gorm.ErrRecordNotFound) {
        fmt.Println("error when processing accountResponse")
        return 0, false, result.Error
    }

// in case that record exists
    if result.Error != nil {
        accountRecord = newAcountData

        result = db.Create(&accountRecord)
    } else {
        result = db.Model(&accountRecord).Updates(newAcountData)
    }

我已经想在找不到记录的情况下运行一些逻辑。但是 - 错误仍然显示在我的控制台中,说 The record was not found:

2021/08/30 18:30:16 /Users/kana/projects/server/data-processor/commands.go:289 record not found
[4.966ms] [rows:0] SELECT * FROM "accounts" WHERE account_name = 'kana' AND "accounts"."deleted_at" IS NULL ORDER BY "accounts"."id" LIMIT 1

为什么会这样?之后整个程序运行良好 - 没有崩溃,整体行为是它的设计方式。只是这个错误消息让我很烦。

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    这是因为 GORM 正在处理一些日志输出,record not found 就是其中之一。如果您需要禁用此类日志活动,您可以执行以下操作:

    如果您使用的是 GORM v1

    https://pkg.go.dev/github.com/jinzhu/gorm#DB.LogMode

    db.LogMode(false)
    

    如果您使用的是 GORM v2,您可以将记录器传递给 gorm 配置并控制输出。

    https://gorm.io/docs/logger.html#Log-Levels

    db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
      Logger: logger.Default.LogMode(logger.Silent),
    })
    

    【讨论】:

      猜你喜欢
      • 2014-11-27
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2019-10-09
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多