如何检查结构中的bool是否已更改为false或者是否已为false

Leo*_*igo 0 boolean go go-gorm

type user_account struct {
ID                 string `sql:"type:uuid;default:uuid_generate_v4()"`
Gender_Identity_id string `sql:"type:uuid;default:uuid_generate_v4()"`
Email              string
Name               string
LastName           string
Password           string
BirthDate          string `sql:"type:date;default:current_time"`
AssignedSex        bool
Show               bool
Sleep              bool
Disabled           bool
}
Run Code Online (Sandbox Code Playgroud)

如果您发送user_account对象而未将sleep值设置为true,则该值将自动为false我需要知道该值是否被设置为false或者是否为false因为它尚未设置

func UpdateUser(userUpdate user_account) {

db, err := gorm.Open("postgres", "user=postgres password=06maneco dbname=HookTest sslmode=disable")
var user user_account

if err != nil {
    fmt.Println(err)
} else {

    db.Where("id = ?", userUpdate.ID).First(&user)
    if userUpdate.Name != user.Name {
        user.Name = userUpdate.Name
    } else if userUpdate.Password != "" {
        user.Password = userUpdate.Password
    } else if userUpdate.Gender_Identity_id != "" {
        user.Gender_Identity_id = userUpdate.Gender_Identity_id
    } else if userUpdate.Email != "" {
        user.Email = userUpdate.Email
    } else if userUpdate.Show != user.Show {
        user.Show = userUpdate.Show
    }
    db.Save(&user)

}
Run Code Online (Sandbox Code Playgroud)

hsr*_*srv 6

对于该Sleep字段,您可以使用一个也可以是nil的指针:

type userAccount struct {
    Sleep *bool
}
Run Code Online (Sandbox Code Playgroud)

现在你可以检查一下:

func check(u userAccount) {
    if u.Sleep == nil {
        // not set
    } else if !(*u.Sleep) {
        // set to false
    } else {
        // set to true
    }
}
Run Code Online (Sandbox Code Playgroud)

在Playground中查看:https://play.golang.org/p/8EIs_yIC0mw.