2

我有 postgres 数据库表

CREATE TABLE foo (
name varchar(50),
types varchar(50)[],
role varchar[10]
);

和相应的结构:

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 数组映射为结构的一部分?

4

2 回答 2

2

感谢https://stackoverflow.com/a/44385791/10138004,我能够通过替换[]stringpq.StringArray.

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

type Foo struct {
Name string `db:"name"`
Types pq.StringArray `db:"types"` //this is what changed.
Role string `db:"role"`
}

and direct mapping is working like a charm now

var foo []Foo
query := `SELECT name, types, roles FROM foo`
dbWrapper.err = dbConn.Select(&foo, query)
于 2019-05-08T07:35:42.227 回答
1

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

于 2019-04-29T10:41:05.340 回答