【问题标题】:Return nil struct instead of empty struct go-gorm返回 nil 结构而不是空结构 go-gorm
【发布时间】:2018-09-30 07:41:42
【问题描述】:

使用以下模型:

type User struct {
    UUID string         `gorm:"primary_key"`
    Name string         `gorm:"NOT NULL"`
    CreatedAt time.Time
    UpdatedAt time.Time
}

如果您使用 go-gorm 对不存在 的用户执行以下查询:

var user User
db.First(&user)

您最终会收到一个填充了日期字段的空结构。有没有办法只接收 nil 结构,还是我想错了?

【问题讨论】:

  • 相当肯定,如果您对时间字段使用指针,如果未设置它们将返回 nil,如果设置则正确返回:)

标签: go go-gorm


【解决方案1】:

在 gorm 中,您应该通过方法调用检查记录是否为空:

if db.First(&user, 77).RecordNotFound() {
    log.Println("UUID:", 77, err)
}

【讨论】:

  • 啊,是的,我以为我做错了。谢谢。
【解决方案2】:

有了这个模型

type User struct {
    UUID string         `gorm:"primary_key"`
    Name string         `gorm:"NOT NULL"`
    CreatedAt time.Time
    UpdatedAt time.Time
}
  • 你可以试试这个来获取 nil 指针
var user *User
db.First(&user)
  • 否则你也可以使用它
var user User
if db.First(&user).RecordNotFound(){
  //record not found
}

【讨论】:

    【解决方案3】:

    添加指针函数

    func (user User) Pointer() *User {
        var t time.Time
        if user.UUID == "" && user.Name == "" && user.CreatedAt == t && user.UpdatedAt == t {
            return nil
        }
        return &user
    }
    

    并通过它

    var user User
    db.First(user.Pointer())
    

    【讨论】:

    • 这不是你处理错误的方式,gorm 提供了一个方法调用来查看是否找不到记录。
    猜你喜欢
    • 2019-01-21
    • 2018-11-14
    • 2020-07-25
    • 2021-10-13
    • 2011-03-04
    • 2023-01-04
    • 1970-01-01
    • 2019-12-13
    • 2016-02-24
    相关资源
    最近更新 更多