【发布时间】:2020-04-11 06:53:52
【问题描述】:
假设某个前端应用程序将带有此类正文的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
}
【问题讨论】:
标签: sql go clickhouse