将行扫描成片

问题描述 投票:1回答:1

我想像这样将sql.Row扫描成一个切片:

func printRows(rows *sql.Rows){
    defer rows.Close()

    for rows.Next() {
        var row = []interface{}{}
        err := rows.Scan(row...)
        if err != nil {
            log.Fatal(err)
        }
        r, err := json.Marshal(row)
        if err != nil {
            log.Fatal(err)
        }
        log.Println("row:", r);
    }
}

但我收到此错误:

2020/02/23 20:05:14原始查询:SELECT * FROM user_table LIMIT 5002020/02/23 20:05:14 SQL:在扫描中应有6个目标参数,而不是0

任何人都知道如何在不使用切片的情况下使它通用吗?

sql go slice
1个回答
1
投票

您可以这样操作:

cols, err := rows.Columns() // Remember to check err afterwards
vals := make([]interface{}, len(cols))
for i, _ := range cols {
    vals[i] = new(string)
}

for rows.Next() {
    err = rows.Scan(vals...)
}

他们在互联网上说您可以使用:

    vals[i] = new(sql.RawBytes)

代替

    vals[i] = new(string)

但是我认为(string)很好,idk

© www.soinside.com 2019 - 2024. All rights reserved.