sql - 将行扫描成 slice

标签 sql go slice

我想将 sql.Row 扫描到 slice 中,如下所示:

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 raw query: SELECT * FROM user_table LIMIT 500 2020/02/23 20:05:14 sql: expected 6 destination arguments in Scan, not 0

有人知道如何在不使用 slice 的情况下使这个通用吗?

最佳答案

你可以这样做:

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)

但我认为(字符串)很好,我不知道

关于sql - 将行扫描成 slice ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60369410/

相关文章:

java - 执行SQL语句时出现语法错误

go - channel 中缺少数据

go - slice of struct != slice of interface 它实现了?

c++ - () 运算符的这种特殊用法是什么意思?

sql - 选择具有特定表和特定列的所有数据库

MySQL从2个表中选择数据

Golang : file. Seek 和 file.WriteAt 未按预期工作

切片上的 Javascript 方法链接不起作用

c++ - 从 RGB 值数组中切出平面(就地)的算法

php - 如何使用数组的多个键/值进行 SQL 查询?