登录
首页 >  Golang >  Go问答

扫描 Postgres 结构体中的指针

来源:stackoverflow

时间:2024-02-25 18:00:28 227浏览 收藏

本篇文章给大家分享《扫描 Postgres 结构体中的指针》,覆盖了Golang的常见基础知识,其实一个语言的全部知识点一篇文章是不可能说完的,但希望通过这些问题,让读者对自己的掌握程度有一定的认识(B 数),从而弥补自己的不足,更好的掌握它。

问题内容

从数据库扫描时,使用如下带有指针的结构而不是不带指针的结构有什么好处?

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

解决方案


正如 @Luke 暗示的那样,如果您尝试将具有 null DB 值的行扫描为非指针类型,则行扫描操作将导致错误。

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

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

Go 1.13还添加了NullTime 等来处理其他可空列类型。

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

本篇关于《扫描 Postgres 结构体中的指针》的介绍就到此结束啦,但是学无止境,想要了解学习更多关于Golang的相关知识,请关注golang学习网公众号!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>