我想将 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/