我以某种方式设法使它工作,但不完全符合预期。下面的代码是 JSONB 列中数据的“poco”。
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]
正如你在上面看到的,每个标签切片的输出是相同的,因为切片只是一个指向底层数组的指针,最后一个从数据库中拉出的会覆盖以前的。我知道如果我声明 postTags [2]string
可以正常工作,但我需要使用 slice,因为我不知道可能有多少标签,对这个问题有什么建议吗?
这是桌子的样子
1 | {"tags": ["asd", "dsa"], "title": "First Title"}
2 | {"tags": ["tsa", "asd"], "title": "Second Title"}
3 | {"tags": ["qwe", "asd"], "title": "Third Title"}