golang各类型都有自己的零值,但是在数据库中都是非空的,因此需要一种结构来表达数据库中值为空的字段。

关于 nil 相关的我就不写了,就说一个:只有类型均为 nil 的变量才等于 nil

database/sql

文档:https://pkg.go.dev/database/sql?tab=doc

可以看到定义的struct中包含两个字段,一个是对应基本类型的值,另一个是 Valid ,在字段注释可以看到:

// Valid is true if Float64 is not NULL

即是用于表示对应的数据库值是否为空,如果 Valid 为真,则值非空,即数据库中值和基本类型字段的值相同; Valid 为假,数据库中对应字段的值为 NULL

GORM

文档:https://gorm.io/zh_CN/docs/create.html

使用 sql 中定义的 Null 相关类型来定义模型字段即可实现。
详情略(懒💤