GO pg 防止默认值
GO pg prevent default value
结构样本
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)
主要问题是汽车的必填字段设置为 false,但当我插入它时 - 它变为默认值(true)。
因为值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}}
结构样本
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)
主要问题是汽车的必填字段设置为 false,但当我插入它时 - 它变为默认值(true)。
因为值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}}