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

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


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

    }


富国沪深
浏览 99回答 3
3回答

泛舟湖上清波郎朗

如果您尝试将具有空 DB 值的行扫描为非指针类型,则行扫描操作将导致错误。最佳实践是检查数据库表的架构。如果列不能有空值,请使用非指针。如果可能为空(无论您认为可能性有多小),请使用指针。如果您发现指针使用起来很乏味(即样板 nil 检查),请使用sql.NullString作为列字段。如果在行扫描期间遇到 NULL,则NullString值将默认为空字符串。Go 1.13 还添加了NullTime etc. 来处理其他 Nullable 列类型。

隔江千里

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

一只斗牛犬

我建议使用Github 上 README 文件末尾pgx提到的内容:lib/pg对于需要新功能或可靠解决报告的错误的用户,我们建议使用正在积极开发的 pgx。然后,您可以使用自定义 pgtype而不是 Go 内置的。
打开App,查看更多内容
随时随地看视频慕课网APP