Преобразовать строку postgres в структуру golang с полем массива - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть таблица 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
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 ]

1 голос
/ 08 мая 2019

Благодаря https://stackoverflow.com/a/44385791/10138004, я могу решить этот драйвер pq для 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)
1 голос
/ 29 апреля 2019

Вы можете использовать pg-go lib для этого. Пожалуйста, посмотрите на pg.Model () . В него можно передать всю структуру.

...