Return nil 结构而不是空结构 go-gorm

Return nil struct instead of empty struct go-gorm

使用以下模型:

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

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

var user User
db.First(&user)

您最终收到一个填充了日期字段的空结构。有没有办法只接收一个 nil 结构,或者我是不是以错误的方式考虑这个问题?

添加指针函数

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 中你应该检查记录是否为空,方法调用:

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

有了这个模型

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
}