作者:ayuanliang | 来源:互联网 | 2023-09-13 16:24
比方说,某些前端应用程序将具有这种主体的POST
请求发送到后端(Go)应用程序:
{
"city": "London","gender": ["Female","Male"],"has_family": [0,1]
}
如您所见,请求正文具有两个数组。我试图将这些数组设置为SQL查询。就我而言,我对ClickHouse
数据库进行SQL查询。我将go-clickhouse包用于此任务。
我尝试了这样的代码,但是会引发错误:
sql:转换参数$ 2类型:不受支持的类型[] string,一个分片
字符串
此外,我尝试将数据类型从[]string
更改为[]interface{}
。不幸的是,在这种情况下,它会引发如下错误:
sql:转换参数$ 2类型:不受支持的类型[] interface {},a
接口切片
代码:
var COntroller= func(responseWriter http.ResponseWriter,request *http.Request) {
type RequestBody struct {
City string `json:"city"`
Gender []string `json:"gender"`
HasFamily []int `json:"has_family"`
}
requestBody := RequestBody{}
decoder := json.NewDecoder(request.Body)
if err := decoder.Decode(&requestBody); err != nil {
fmt.Println(err)
return
}
rows,err := database.ClickHouse.Query("SELECT * FROM TABLE_NAME WHERE lower(CITY) = lower($1) AND GENDER IN ($2) AND HAS_FAMILY IN ($3);",requestBody.City,requestBody.Gender,requestBody.HasFamily)
if err != nil {
fmt.Println(err)
return
}
// other code
}
尝试用requestBody.Gender
包装requestBody.HasFamily
和clickhouse.Array()
。并尝试将$n
更改为?
。
代码:
rows,err := database.ClickHouse.Query(
"SELECT * FROM TABLE_NAME WHERE lower(CITY) = lower(?) AND GENDER IN (?) AND HAS_FAMILY IN (?);",requestBody.City,clickhouse.Array(requestBody.Gender),clickhouse.Array(requestBody.HasFamily),)
更多信息:https://godoc.org/github.com/mailru/go-clickhouse#Array