我想像这样将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
任何人都知道如何在不使用切片的情况下使它通用吗?
您可以这样操作:
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