我正在尝试通过弹性搜索获取搜索结果,但出现此错误:
cannot use true (type bool) as type string in function argument
请任何人可以帮助解决该问题?我是Go编程的新手,所以希望您将来提出改进此情况的建议。
这是我的代码段
func SearchCallback(w *http.ResponseWriter, req *http.Request) {
api.Domain = "127.0.0.1"
// search males
searchQuery := `{
"query": {
"term": {"content":"male"}
}
}`
var response2 map[string]interface{}
response2, err := core.SearchRequest(true, "people", "male", searchQuery, "")
if err != nil {
log.Fatalf("The search of males has failed:", err)
}
var values2 []interface{}
for _, v := range response2.Hits.Hits {
var value2 map[string]interface{}
err := json.Unmarshal(v.Source, &value2)
if err != nil {
log.Fatalf("Failed to unmarshal, line 65", err)
}
values2 = append(values2, value2)
}
fmt.Println(values2)
jsonV2, err := json.Marshal(values2)
if err != nil {
log.Fatalf("Failed marshalling: line 71", err)
}
fmt.Println(string(jsonV2))
}
Run Code Online (Sandbox Code Playgroud)
Go没有隐式类型转换。由于您是编程的新手,这意味着在不明确声明希望将其视为此类的情况下,不能将一种类型视为另一种类型。一个int不是浮点数,一个浮点数不是一个切片,而bool则不是一个字符串。不幸的是,有时您可以使用类型转换来解决此问题,对于布尔值,您不能简单地使用类型转换。即string(bool)不会编译。
有多种解决方法。一是更换true与fmt.Sprintf("%t",true)。这是更一般的情况,如果true不是布尔变量,它将返回表示"true"或"false"依赖的字符串。它还可以很好地推广到其他类型,例如整数,fmt.Sprintf("%d",myInteger)例如,将an转换int为a string。
但是...在这种情况下,由于该值始终为true,因此不需要,只需将其替换true为即可"true"。该字符串"%t"返回将是字符串"true",所以没有必要去通过转换的麻烦。