Golang Postgresql 数组

Che*_*eam 3 postgresql go

如果我有一个返回如下内容的表:

id: 1
names: {Jim, Bob, Sam}
Run Code Online (Sandbox Code Playgroud)

名称是一个 varchar 数组。

如何在 Go 中将其扫描回 [] 字符串?我正在使用 lib/pg

现在我有类似的东西

rows, err := models.Db.Query("SELECT pKey, names FROM foo")
for rows.Next() {
            var pKey int
            var names []string
            err = rows.Scan(&pKey, &names)
}
Run Code Online (Sandbox Code Playgroud)

我不断得到:

panic: sql: Scan error on column index 1: unsupported Scan, storing driver.Value type []uint8 into type *[]string
Run Code Online (Sandbox Code Playgroud)

看起来我需要使用 StringArray https://godoc.org/github.com/lib/pq#StringArray

但是,我认为我太新了,无法准确了解如何使用: func (a *StringArray) Scan(src interface{})

mko*_*iva 6

你是对的,你可以使用StringArray但你不需要调用

func (a *StringArray) Scan(src interface{})
Run Code Online (Sandbox Code Playgroud)

自己的方法,rows.Scan当你传递任何实现Scanner接口的东西时,它会自动调用。

因此,您需要做的是转换[]string*StringArray并将其传递给rows.Scan,如下所示:

rows, err := models.Db.Query("SELECT pKey, names FROM foo")
for rows.Next() {
            var pKey int
            var names []string
            err = rows.Scan(&pKey, (*pq.StringArray)(&names))
}
Run Code Online (Sandbox Code Playgroud)