简体   繁体   English

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

[英]Scan array typed DB field into array/slice in Golang

tl; tl; dr 博士

I have an sql table users which includes an array field. 我有一个SQL表users ,其中包括一个数组字段。 How can I Scan it to variable in golang? 如何在golang中将其扫描到变量? My approach: 我的方法:

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)

Works fine for id, username. 适用于ID,用户名。

As @mkopriva already pointed out, this can either be accomplished using the StringArray method or with the more flexible Array method (as it accepts an interface as the argument), both found within the "github.com/lib/pq" package. 正如@mkopriva所指出的那样,可以使用StringArray方法或更灵活的Array方法(因为它接受一个接口作为参数)来完成此任务,它们都可以在"github.com/lib/pq"包中找到。

As an aside, it is also a good practice to use prepared statements. 顺便说一句,使用准备好的语句也是一种好习惯。

Full example: 完整示例:

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
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM