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

3

我正在使用PostgreSQL数据库表:

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数组作为结构体的一部分进行映射?
2个回答

4

感谢https://dev59.com/HKLia4cB1Zd3GeqPhleR#44385791,我通过用pq.StringArray替换[]string成功解决了sqlx的pq驱动问题(https://godoc.org/github.com/lib/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)

1
你可以使用pg-go库来实现这个功能。请查看pg.Model()。它可以传递整个结构体。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接