登录
首页 >  Golang >  Go问答

将 postgres 行转换为带有数组字段的 golang 结构

来源:stackoverflow

时间:2024-04-13 18:27:34 221浏览 收藏

小伙伴们有没有觉得学习Golang很有意思?有意思就对了!今天就给大家带来《将 postgres 行转换为带有数组字段的 golang 结构》,以下内容将会涉及到,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

问题内容

我的 postgres 数据库表为

create table foo (
name varchar(50),
types varchar(50)[],
role varchar[10]
);

以及go中相应的结构:

type foo struct {
name string `db:"name"`
types []string `db:"types"`
role string `db:"role"`
}

我想将数据库行获取到我的结构中。现在我可以使用以下方法来做到这一点:

var foo foo
query := `select name, types, roles from foo limit 1`
err = dbconn.queryrow(query).scan(&foo.name,  pq.array(&foo.types), &foo.role)

但我想使用直接映射来实现相同的目的。像这样的东西:

var foo []Foo
query := `SELECT name, types, roles FROM foo`
dbWrapper.err = dbConn.Select(&foo, query)

上面的代码片段给了我错误,因为 types 是 pq 数组。是否可以直接将 pq 数组映射为结构体的一部分?


解决方案


感谢 https://stackoverflow.com/a/44385791/10138004,我能够通过用 pq.stringarray 替换 []string 来解决 sqlx (https://godoc.org/github.com/lib/pq) 本身的 pq 驱动程序。

因此,更新后的结构如下所示:

type foo struct {
name string `db:"name"`
types pq.stringarray `db:"types"` //this is what changed.
role string `db:"role"`
}

直接映射现在就像一个魅力

var foo []Foo
query := `SELECT name, types, roles FROM foo`
dbWrapper.err = dbConn.Select(&foo, query)

您可以使用 pg-go lib 来实现此目的。请查看 pg.Model()。可以将整个结构传递给它。

今天关于《将 postgres 行转换为带有数组字段的 golang 结构》的内容就介绍到这里了,是不是学起来一目了然!想要了解更多关于的内容请关注golang学习网公众号!

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