登录
首页 >  Golang >  Go问答

在golang中如何向statement.Query()函数传递变量id?

来源:stackoverflow

时间:2024-03-21 15:57:31 480浏览 收藏

在 Golang 中使用 SQLx 库时,向 `stmt.Query()` 函数传递可变参数(如 ID)存在困难。由于该函数要求参数类型为 `[]interface{}`,而直接传递字符串切片会引发类型错误。解决方法是将字符串切片转换为 `[]interface{}` 切片,从而满足函数要求。通过将字符串逐一包装到接口中,可以实现动态生成可变参数,并成功执行查询。

问题内容

我在 postgres 中有这个查询,它根据传递的参数查询 1 或 n 个用户:

select name, phone from clients where id in ('id1','id2')

现在,当我尝试在 golang 中使用它时,我在如何将这种类型的变量参数传递给 statements.query() 函数时遇到了问题:

ids := []string{"0aa6c0c5-e44e-4187-b128-6ae4b2258df0", "606b0182-269f-469a-bb29-26da4fa0302b"}
rows, err := stmt.query(ids...)

这会引发错误:无法使用“ids”(类型 []string)作为类型 []interface{}

当我检查源代码查询时,它可以接收许多接口类型的变量:

func (s *stmt) query(args ...interface{}) (*rows, error) {
    return s.querycontext(context.background(), args...)
}

如果我手动执行此操作,它会起作用:

rows, err := stmt.Query("0aa6c0c5-e44e-4187-b128-6ae4b2258df0", "606b0182-269f-469a-bb29-26da4fa0302b")

但是我当然需要参数为 1 个或更多,并且是动态生成的。

我正在使用 sqlx 库。


解决方案


正如我们在 query() 方法方案以及错误消息中看到的,该方法需要 []interface{} 类型的参数。

func (s *stmt) query(args ...interface{}) (*rows, error) {
    return s.querycontext(context.background(), args...)
}

在您的代码中,ids 变量保存 []string 数据。将其更改为 []interface{},这样它就满足 query() 要求,然后就可以工作了。

ids := []interface{}{
    "0aa6c0c5-e44e-4187-b128-6ae4b2258df0",
    "606b0182-269f-469a-bb29-26da4fa0302b",
}
rows, err := stmt.Query(ids...)

今天关于《在golang中如何向statement.Query()函数传递变量id?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>