Мне как-то удалось заставить это работать, но не совсем так, как предполагалось.
Код ниже "poco" для данных в столбце JSONB.
type post struct {
Title string `json:"title"`
Tags []string `json:"tags"`
}
Ниже у меня есть инициализация среза постов, а также одного поста для сканирования каждой строки в. Остальное - стандартный код запроса.
это
data
- это имя столбца, которое объявлено как jsonb
var t post
var h []post
rows, err := conpool.Query("SELECT data FROM post")
if err != nil {
fmt.Println(err)
}
defer rows.Close()
for rows.Next() {
if err := rows.Scan(&t); err != nil {
fmt.Println(err)
}
h = append(h, t)
}
for _, v := range h {
fmt.Println(v.Title,v.Tags)
}
Выходные данные, которые я получаю:
First Title [qwe asd]
Second Title [qwe asd]
Third Title [qwe asd]
Как вы можете видеть выше, вывод каждого среза тега одинаков, так как срез является просто указателем на последний базовый массив, который извлекается из базы данных, перезаписывает предыдущие. Я знаю, что если я объявлю сообщение как Tags [2]string
, оно будет работать, но мне нужно использовать слайс, поскольку я понятия не имею, сколько может быть тегов, какие-либо предложения по этой проблеме?
Вот как выглядит таблица
1 | {"tags": ["asd", "dsa"], "title": "First Title"}
2 | {"tags": ["tsa", "asd"], "title": "Second Title"}
3 | {"tags": ["qwe", "asd"], "title": "Third Title"}