问题:如题
本来是第一行的,显示成第二行之类。
请问如解决?
代码如下:
package main
import (
"database/sql"
"fmt"
_ "mysqldriver"
)
func main() {
selects()
}
func checkErr(err error) {
if err != nil {
panic(err)
}
}
/**
查询演示
*/
func selects() {
db, err := sql.Open("mysql", "root:sz123@tcp(127.0.0.1:3306)/jcrm?charset=utf8")
checkErr(err)
// 查询数据
//查询数据,取所有字段
rows2, _ := db.Query("SELECT * FROM cd_gentuanyou limit 0,10")
//返回所有列
cols, _ := rows2.Columns()
//这里表示一行所有列的值,用[]byte表示
vals := make([][]byte, len(cols))
//这里表示一行填充数据
scans := make([]interface{}, len(cols))
//这里scans引用vals,把数据填充到[]byte里
for k, _ := range vals {
scans[k] = &vals[k]
}
i := 0
result := make(map[int]map[string]string)
for rows2.Next() {
//填充数据
rows2.Scan(scans...)
//每行数据
row := make(map[string]string)
//把vals中的数据复制到row中
for k, v := range vals {
key := cols[k]
fmt.Printf(string(v))
//这里把[]byte数据转成string
row[key] = string(v)
}
//放入结果集
result[i] = row
i++
}
//fmt.Println(result)
for k, v := range result {
fmt.Printf("第%d行", k)
fmt.Println(v["gentuanyouid"] + "===>" + v["title"])
}
db.Close()
}
这个是map的机制,map存储数据本身是没有一定顺序的,每次遍历map可能顺序都不一样。