为了账号安全,请及时绑定邮箱和手机立即绑定

GO pg 防止默认值

GO pg 防止默认值

Go
青春有我 2022-11-23 15:59:39

结构样本


type Car struct {

    ID              uint64

    Required        bool                   `pg:"required,notnull"`

    Name            string                 `pg:"name"`

    }

移民:


BEGIN;


ALTER TABLE cars ADD COLUMN required BOOLEAN NOT NULL DEFAULT true;


END;

当我创建汽车结构时:


car = Car{Name:"Name",Required:false}

当我试图通过写来添加一些新车时:


_, err = r.db.Model(&car).Insert()

SQL 查询看起来像这样:


INSERT INTO "cars" ("id", "name", "required") VALUES (DEFAULT, "Name", DEFAULT)

car 的主要问题是 required 字段设置为 false,但是当我插入它时 - 它更改为 DEFAULT (true)。


查看完整描述

1 回答

?
函数式编程

TA贡献1513条经验 获得超9个赞

因为该值false将被读取为空值。因为空值您的数据将更改为默认值 (TRUE)


您必须将结构更改为这样


type Car struct {

    ID       uint64

    Required *bool  `pg:"required,notnull,default:true"`

    Name     string `pg:"name"`

}

并像这样定义结构


required := false

car = Car{Name:"Name", Required: &required}

或者您也可以sql.NullBool在结构中使用数据类型


type Car struct {

    ID       uint64

    Required sql.NullBool  `pg:"required,notnull,default:true"`

    Name     string `pg:"name"`

}


car = Car{Name:"Name", Required: sql.NullBool{Bool: false, Valid: true}}


查看完整回答
反对 回复 2022-11-23

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信