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

从 Postgres 扫描到带有指针的结构体

从 Postgres 扫描到带有指针的结构体

Go
富国沪深 2023-08-07 18:49:33
从数据库扫描时,使用如下带有指针的结构而不是不带指针的结构有什么好处?  type User struct {      ID           *UserID    `json:"id,omitempty"`      Email        *string    `json:"email"`      Username     *string    `json:"username"`      PasswordHash *[]byte    `json:"password_hash"`      CreatedAt    *time.Time `json:"created_at"`    }
查看完整描述

3 回答

?
泛舟湖上清波郎朗

TA贡献1818条经验 获得超3个赞

如果您尝试将具有空 DB 值的行扫描为非指针类型,则行扫描操作将导致错误。

最佳实践是检查数据库表的架构。如果列不能有空值,请使用非指针。如果可能为空(无论您认为可能性有多小),请使用指针。

如果您发现指针使用起来很乏味(即样板 nil 检查),请使用sql.NullString作为列字段。如果在行扫描期间遇到 NULL,则NullString值将默认为空字符串。

Go 1.13 还添加了NullTime etc. 来处理其他 Nullable 列类型。


查看完整回答
反对 回复 2023-08-07
?
隔江千里

TA贡献1906条经验 获得超10个赞

如果需要区分零值和空值,则在扫描解组时使用带有指针的结构是必要的。当相应值为 null 时, string/int/struct 将失败(或在解组时初始化为零值),而指向 string/int/struct 的指针将设置为 nil。



查看完整回答
反对 回复 2023-08-07
?
一只斗牛犬

TA贡献1784条经验 获得超2个赞

我建议使用Github 上 README 文件末尾pgx提到的内容:lib/pg

对于需要新功能或可靠解决报告的错误的用户,我们建议使用正在积极开发的 pgx。

然后,您可以使用自定义 pgtype而不是 Go 内置的。


查看完整回答
反对 回复 2023-08-07
  • 3 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

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