提问帖,有没有朋友帮我看下。

weixin_38066537 2019-09-20 10:52:14
//在数据查询数据键值对形式输出
```
func Select() []map[string] string{
//初始化数据库并连接数据库
db_fb := InitDB()
sqlstr := "select * from "+ query_p.name + " where "+query_p.where+";"
rows, err := db_fb.Query(sqlstr)
//如果有错误输出错误信息
checkErr(err)
//构造scanArgs、values两个数组,scanArgs的每个值指向values相应值的地址
columns, _ := rows.Columns()//返回查询到的列名
scanArgs := make([]interface{}, len(columns))
values := make([]interface{}, len(columns))
for i := range values {
scanArgs[i] = &values[i]
}
record := make(map[string]string)
res := make([]map[string]string,0)
for rows.Next() {
//将行数据保存到record字典
err = rows.Scan(scanArgs...)
checkErr(err)
for i, col := range values {
if col != nil {
record[columns[i]] = string(col.([]byte))
}
}
res = append(res,record) /**问题应该出在这里***/
}
fmt.Println(res)
return res
}
```
```
输出:
map[code1:2 code2:331100000000 name:丽水市]
map[code1:2 code2:331100000000 name:丽水市]
map[code1:2 code2:331100000000 name:丽水市]
map[code1:2 code2:331100000000 name:丽水市]
...
后面是一样的总共38条数据,结果是错误的,理想数据应该是
map[code1:2 code2:230100000000 name:哈尔滨市]
map[code1:2 code2:230200000000 name:齐齐哈尔市]
map[code1:2 code2:230300000000 name:鸡西市]
map[code1:2 code2:230400000000 name:鹤岗市]
...
map[code1:2 code2:331100000000 name:丽水市]
```
丽水市这条是最后一条数据
后面每条都不一样。
请大家帮忙看看。谢谢大家.



...全文
11 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_38076769 2019-09-20
  • 打赏
  • 举报
回复
因为你每次append的都是同一个对象(map)啊。
weixin_38099429 2019-09-20
  • 打赏
  • 举报
回复
那为啥直接用 Printfln打印这个会得到正确的结果。很迷惑
weixin_38101849 2019-09-20
  • 打赏
  • 举报
回复
把res = append(res,record)改成 fmt.Println(record) 数据就都出来了
weixin_38127863 2019-09-20
  • 打赏
  • 举报
回复
因为你每次append的record都是同一个变量 你只是在不停的改变record的值 所以最终状态,你得到了一个有一模一样数据的列表 而直接print的话,你得到的是一个不停答应当前状态的输出。
weixin_38146045 2019-09-20
  • 打赏
  • 举报
回复
原来如此,谢谢大佬。

433

社区成员

发帖
与我相关
我的任务
社区描述
其他技术讨论专区
其他 技术论坛(原bbs)
社区管理员
  • 其他技术讨论专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧