将 postgres 行转换为带有数组字段的 golang 结构
Convert a postgres row into golang struct with array field
我将 postgres 数据库 table 作为
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 数组映射为结构的一部分?
您可以为此使用 pg-go
库。请看pg.Model()。可以将整个结构传递给它。
感谢 , I am able to solve this pq driver for sqlx (https://godoc.org/github.com/lib/pq) 本身,将 []string
替换为 pq.StringArray
。
因此,更新后的结构如下所示:
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)
我将 postgres 数据库 table 作为
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 数组映射为结构的一部分?
您可以为此使用 pg-go
库。请看pg.Model()。可以将整个结构传递给它。
感谢 []string
替换为 pq.StringArray
。
因此,更新后的结构如下所示:
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)