0
votes

With the following model:

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

If you do the following query with go-gorm for a user that does NOT exist:

var user User
db.First(&user)

You end up receiving an empty struct with the date fields populated. Is there a way to instead just receive a nil struct back or am I thinking about this in the wrong way?

3
Pretty sure that if you use pointers for your time fields they will be returned nil if they aren't set, and returned properly if they are :) - Ullaakut

3 Answers

4
votes

In gorm you are supposed to check if the record is empty, with a method call:

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

With this model

type User struct {
    UUID string         `gorm:"primary_key"`
    Name string         `gorm:"NOT NULL"`
    CreatedAt time.Time
    UpdatedAt time.Time
}
  • you can try this for getting nil pointer
var user *User
db.First(&user)
  • or else you can use this also
var user User
if db.First(&user).RecordNotFound(){
  //record not found
}
-1
votes

Add a Pointer function

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

and pass it

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