如何将 db.QueryRow(sql).Scan 结果扫描至 map?

如何将 db.queryrow(sql).scan 结果扫描至 map?

利用 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?的详细内容,更多请关注其它相关文章!