读取数据库的SELECT语句是动态变化的,因此查询出来的列也是变化的。按照网上查找的资料,使用下面的方法进行处理:
cols, err := rows.Columns() // Remember to check err afterwards
vals := make([]interface{}, len(cols))
for i, _ := range cols {
vals[i] = new(sql.RawBytes)
}
for rows.Next() {
err = rows.Scan(vals...)
// Now you can check each element of vals for nil-ness,
// and you can use type introspection and type assertions
// to fetch the column into a typed variable.
}
但是err = rows.Scan(vals...)这一句总是执行不了,报错:sql: Scan error on column index 0: destination not a pointer
我用的具体程序是:
for rows.Next() {
err := rows.Scan(vals...)
checkErr(err)
for i := range vals {
mt.Print(vals[i], " ")
}
fmt.Print("\n")
}
但是使用下面的却可以执行:
for rows.Next() {
err := rows.Scan(&vals[0], &vals[1], &vals[2], &vals[3])
checkErr(err)
for i := range vals {
mt.Print(vals[i], " ")
}
fmt.Print("\n")
}
但是打印出来的结果是ASCII码,如下:
[53 57 51 53 52 57 57 55 54] [50 48 49 56 45 49 50 45 50 50 32 49 54 58 51 57 58 48 50] [54 54 48 89 76 46 80 86] [48 46 48 53 50 53 57 50 49 57 57 50 57 53 55 53 57 50]
[53 57 51 53 53 48 49 54 57] [50 48 49 56 45 49 50 45 50 50 32 49 54 58 51 57 58 48 52] [54 54 48 89 76 46 80 86] [48 46 48 53 51 51 50 53 53 52 49 51 49 55 52 54 50 57 50]
[53 57 51 53 53 48 51 51 51] [50 48 49 56 45 49 50 45 50 50 32 49 54 58 51 57 58 48 54] [54 54 48 89 76 46 80 86] [48 46 48 53 51 56 56 52 53 56 52 52 53 54 54 56 50 50 48 53]
有没有大神处理过此类问题?
有疑问加站长微信联系(非本文作者)