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,
})

关键修正点:

  1. 参数名使用小写(limit_valueoffset_value),与查询语句中的占位符完全匹配
  2. 显式将整数值转换为int类型
  3. 修正变量名拼写错误(offest_valueoffset_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_valueoffset_value的实际类型,确保它们不是其他整数类型(如int64),这可能导致序列化问题。

回到顶部