登录
首页 >  Golang >  Go问答

使用 Gorm 和 Postgres 在 Go 语言中将字符串转换为 JSONB

来源:stackoverflow

时间:2024-03-21 08:45:33 110浏览 收藏

在 Go 中使用 Gorm 和 Postgres 时,将字符串转换为 JSONB 可能会遇到挑战。本文提供了一种避免使用 Gorm 特定类型 `postgres.jsonb` 的解决方案。使用 `pgtype.jsonb` 是最佳实践,因为它利用了底层驱动程序,适用于各种 JSONB 类型。本文展示了如何使用 `pgtype.jsonb` 获取和设置 JSONB 值,从而简化了 Gorm 中 JSONB 的操作。

问题内容

我有一个 go 结构体,其中包含一段字符串,我想使用 gorm 将其保存为 postgres 中的 jsonb 对象。

我遇到了一个需要使用 gorm 特定类型 (postgres.jsonb) 的解决方案,我想避免使用它。

当我尝试在模型中使用切片运行 automigrate 时,它​​会出现恐慌并且不会启动,尽管当我将此切片包装在结构中(我可以这样做)时,它会运行而不会出现错误,但不会启动在 postgres 中创建列。

type user struct {
        gorm.model
        data []string `sql:"type:"jsonb"; json:"data"`
} //panics
type User struct {
        gorm.Model
        Data struct {
            NestedData []string
        } `sql:"type:"jsonb"; json:"data"`
} //Doesn't crash but doesn't create my column

有人能够在不使用模型中的 postgres.jsonb 类型的情况下使用 gorm 操作 jsonb 吗?


解决方案


在 gorm 中使用 jsonb 的最简单方法是使用 pgtype.jsonb

gorm 使用 pgx 作为驱动程序,并且 pgx 有名为 pgtype 的包,其类型名为 pgtype.jsonb

如果您已经按照 gorm 的指示安装了 pgx,则无需安装任何其他软件包。

此方法应该是最佳实践,因为它使用底层驱动程序并且不需要自定义代码。它还可用于 []string 之外的任何 jsonb 类型。

type user struct {
    gorm.model
    data pgtype.jsonb `gorm:"type:jsonb;default:'[]';not null"`
}

从数据库获取价值

u := user{}
db.find(&u)

var data []string

err := u.data.assignto(&data)
if err != nil {
    t.fatal(err)
}

将值设置为db

u := User{}

err := u.Data.Set([]string{"abc","def"})
if err != nil {
    return
}

db.Updates(&u)

好了,本文到此结束,带大家了解了《使用 Gorm 和 Postgres 在 Go 语言中将字符串转换为 JSONB》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多Golang知识!

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