如果我有一个返回类似以下内容的表格:
我一直收到以下信息:
id: 1
names: {Jim, Bob, Sam}
names是一个varchar数组。
我该如何在Go中将其扫描回[]string呢?我正在使用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)
}
我一直收到以下信息:
panic: sql: Scan error on column index 1: unsupported Scan, storing driver.Value type []uint8 into type *[]string
看起来我需要使用StringArray: https://godoc.org/github.com/lib/pq#StringArray
但是,我认为我对Go还太陌生,不太清楚如何使用:
func (a *StringArray) Scan(src interface{})
Type(value)
;有时,就像在这种情况下一样,您需要在类型周围加上括号,例如(*Type)(value)
。更多信息和示例请参见:https://golang.org/ref/spec#Conversions - mkoprivapq.StringArray
无法处理 null,但 PostgreSQL 数组可以包含NULL
。更好的方法是使用pq.Array()
,就像 ak89224 的答案中所示,结合sql.NullString
使用。 - Jonas