我在GO函数中查询mysql数据库,并希望在地图中返回键值对,但无法弄清楚如何完成此操作。到目前为止,我有这个功能:
func GetData(callIds []string) map[string]Records {
//db insert
db, err := sql.Open("mysql", mySql)
if err != nil {
fmt.Printf(err.Error())
}
defer db.Close()
//db query
var foo string
err = db.QueryRow("select foo from bardata where callId = %v", 1).Scan(&foo)
if err != nil {
fmt.Printf(err.Error())
}
fmt.Println(foo)
return nil
我想返回一个地图,其中密钥为callId
,值为foo
,表示查询返回的每一行。
答案 0 :(得分:1)
首先,您需要构建查询。实际上,你甚至没有使用你的功能输入。由于我们有不同数量的参数,我们需要做一些工作来构建合适数量的占位符:
query := `select callid, foo from bardata where callid in (` +
strings.Repeat(`?,`, len(callIds) - 1) + `?)`
然后,使用传入的值执行:
rows, err := db.Query(query, callIds...)
if err != nil {
// handle it
}
defer rows.Close()
然后收集结果:
ret := map[string]string{}
for rows.Next() {
var callid, foo string
err = rows.Scan(&callid, &foo)
if err != nil {
// handle it
}
ret[callid] = foo
}
return ret
注意事项:
如果callIds
为空切片,则会导致占位符不匹配错误。如果可能,那么你需要检测它并单独处理它(可能是通过返回错误或空地图 - 不需要查询数据库)。
这会返回一个map[string]string
,其中的值是" foo"是。在您的问题中,您的函数返回map[string]Records
,但没有关于Records
可能是什么或如何获取的信息。
您可能希望以不同于其他错误的方式处理sql.ErrNoRows
。
答案 1 :(得分:0)
mpi_group_world
输出:
&map [col1:abc col2:123]