Postgresql 使用数组字段将postgres行转换为golang结构
我有postgres db表作为Postgresql 使用数组字段将postgres行转换为golang结构,postgresql,go,sqlx,Postgresql,Go,Sqlx,我有postgres db表作为 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"` } 我想将db行提取到我的结构中。现在,我可以通过以下方式实现这一点: var foo Foo
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"`
}
我想将db行提取到我的结构中。现在,我可以通过以下方式实现这一点:
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)
var foo []Foo
query := `SELECT name, types, roles FROM foo`
dbWrapper.err = dbConn.Select(&foo, query)
上面的代码片段给了我错误,因为
类型是pq数组。可以直接将pq数组映射为struct的一部分吗?您可以使用pg go
lib进行映射。请看。可以将整个结构传递给它。多亏了,我能够通过将[]string
替换为pq.StringArray
来解决sqlx()本身的pq驱动程序
因此,更新后的结构如下所示:
type Foo struct {
Name string `db:"name"`
Types pq.StringArray `db:"types"` //this is what changed.
Role string `db:"role"`
}
而直接映射现在正发挥着巨大的作用