请问怎么把sql.Rows转成map

youseeli · 2013-05-03 23:17:54 · 7737 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2013-05-03 23:17:54 的主题,其中的信息可能已经有所发展或是发生改变。

如题..我想把sql.Rows转成map..请问怎么实现写了下..失败了代码如下

func (this *Admin) Query(query string, args ...interface{}) ([]map[string]interface{}, error) {
    db, err := this.getDB()
    defer db.Close()
    if err != nil {
        return nil, err
    }
    stmt, err := db.Prepare(query)
    defer stmt.Close()
    if err != nil {
        return nil, err
    }
    res, err := stmt.Query(args...)
    defer res.Close()
    if err != nil {
        return nil, err
    }
    fields, _ := res.Columns()
    fieldslen := len(fields)
    ms := []map[string]interface{}{}
    for res.Next() {
        m := map[string]interface{}{}
        scaninterfaces := make([]interface{}, 0, fieldslen)
        for _, field := range fields {
            //m[field] = 0
            scaninterfaces = append(scaninterfaces, m[field])
        }
        res.Scan(scaninterfaces...)
        ms = append(ms, m)
    }
    return ms, nil
}

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

7737 次点击  
加入收藏 微博
3 回复  |  直到 2019-06-06 13:41:48
youseeli
youseeli · #1 · 12年之前

就res.Scan(scaninterfaces...)貌似是这句没起作用?没能把内容传到 m 里

polaris
polaris · #2 · 12年之前
m := map[string]interface{}{}
scaninterfaces := make([]interface{}, 0, fieldslen)
for _, field := range fields {
    //m[field] = 0
    scaninterfaces = append(scaninterfaces, m[field])
}

这里m[field]根本没值啊。

另外,Scan必须传递某一字段的指针。

wangneng
wangneng · #3 · 6年之前
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传