将数组类型的数据库字段扫描到 Golang 中的数组/切片中

i a*_*ife 5 sql go

TL; 博士

我有一个users包含数组字段的 sql 表。如何将其扫描到 golang 中的变量?我的做法:

var id        int
var username  string
var activites []string
row := db.QueryRow("SELECT id, username, activities FROM users WHERE id = 1")
err := row.Scan(&id, &username, &activites)
Run Code Online (Sandbox Code Playgroud)

适用于 id、用户名。

way*_*tta 7

正如 @mkopriva 已经指出的那样,这可以使用该StringArray方法或更灵活的Array方法(因为它接受接口作为参数)来完成,两者都可以在"github.com/lib/pq"包中找到。

顺便说一句,使用准备好的语句也是一个很好的做法。

完整示例:

var id int
var username string
var activities []string

sqlStatement := `
    SELECT
        id,
        username, 
        activities 
    FROM 
        users 
    WHERE 
        id = $1
`

stmt, err := db.Prepare(sqlStatement)
if err != nil {
    // handle err
}

defer stmt.Close()

row := stmt.QueryRow(1)

err = row.Scan(
    &id,
    &username,
    pq.Array(&activities) // used here
)

if err == sql.ErrNoRows {
    // handle err
}

if err != nil {
    // handle err
}
Run Code Online (Sandbox Code Playgroud)