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}}