Golang中如何向动态Couchbase N1QL查询传递整型值
Golang中如何向动态Couchbase N1QL查询传递整型值 我的动态N1QL查询没有获取到参数值,有人能告诉我这里遗漏了什么吗?我该如何向N1QL请求传递整数值?
以下是我构建N1QL查询的方式:
IMPORT (
"gopkg.in/couchbase/gocb.v2"
)
queryString :="select meta().id,round((META().cas)/1000000000) as
maxCAS,Expires from `" + configuration.BucketName + "` where
APPID='"+configuration.APPID+"' "
queryString += "LIMIT $Limit_value "
queryString += "offset $offest_value; "
params := make(map[string]interface{})
params["Limit_value"] = Limit_value // offest_value 和 Limit_value 都是整数变量
params["offest_value"] = offest_value
rows, err := cluster.Query(queryString,&gocb.QueryOptions{NamedParameters: params})
更多关于Golang中如何向动态Couchbase N1QL查询传递整型值的实战教程也可以访问 https://www.itying.com/category-94-b0.html
1 回复
更多关于Golang中如何向动态Couchbase N1QL查询传递整型值的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Golang中向Couchbase N1QL查询传递整型值时,问题通常出现在参数类型转换上。以下是修正后的代码示例:
import (
"gopkg.in/couchbase/gocb.v2"
)
queryString := "SELECT meta().id, ROUND((META().cas)/1000000000) AS maxCAS, Expires "
queryString += "FROM `" + configuration.BucketName + "` "
queryString += "WHERE APPID = $app_id "
queryString += "LIMIT $limit_value "
queryString += "OFFSET $offset_value"
params := make(map[string]interface{})
params["app_id"] = configuration.APPID
params["limit_value"] = int(Limit_value) // 显式转换为int类型
params["offset_value"] = int(offset_value) // 确保变量名拼写正确
rows, err := cluster.Query(queryString, &gocb.QueryOptions{
NamedParameters: params,
})
关键修正点:
- 参数名使用小写(
limit_value和offset_value),与查询语句中的占位符完全匹配 - 显式将整数值转换为
int类型 - 修正变量名拼写错误(
offest_value→offset_value)
如果问题仍然存在,可以尝试使用位置参数替代命名参数:
queryString := "SELECT meta().id, ROUND((META().cas)/1000000000) AS maxCAS, Expires "
queryString += "FROM `" + configuration.BucketName + "` "
queryString += "WHERE APPID = ? "
queryString += "LIMIT ? "
queryString += "OFFSET ?"
rows, err := cluster.Query(queryString, &gocb.QueryOptions{
PositionalParameters: []interface{}{
configuration.APPID,
int(Limit_value),
int(offset_value),
},
})
检查Limit_value和offset_value的实际类型,确保它们不是其他整数类型(如int64),这可能导致序列化问题。

