利用 db.queryrow(sql).scan 将结果集扫描至 map
在 go 中,db.queryrow(sql).scan 只能将结果集扫描至变量指针,而无法直接扫描至 map。以下示例会提示扫描目标不是指针的错误:
res := map[string]*interface{}{"id": nil, "name": nil, "password": nil, "add_time": nil}sql := "select * from test where id = ?"err := db.queryrow(sql, id).scan(res["id"], res["name"], res["password"], res["add_time"])
登录后复制
为了解决这个问题,需要对 map 进行初始化以提供指针:
res := map[string]*interface{}{ "id": new(int), "name": new(string), "password": new(string), "add_time": new(int),}
登录后复制
这样,res 中的每一个值都将成为一个指针,指向实际数据。然后,db.queryrow(sql).scan 就可以将结果集扫描至 res 中。
修改后的示例:
func selectOne(id int) { res := map[string]*interface{}{ "id": new(int), "name": new(string), "password": new(string), "add_time": new(int), } sql := "select * from test where id = ?" err := db.QueryRow(sql, id).Scan(res["id"], res["name"], res["password"], res["add_time"]) if err != nil { fmt.Println("获取数据失败:", err.Error()) } else { fmt.Println(res) }}
登录后复制
以上就是如何将 db.QueryRow(sql).Scan 结果扫描至 map?的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2477550.html