不能在函数参数中使用true(类型bool)作为类型字符串

时间:2014-03-18 11:08:21

标签: go elasticsearch

我试图从弹性搜索中获取搜索结果,但我收到此错误:

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

1 个答案:

答案 0 :(得分:5)

Go没有隐式类型转换。因为你是编程的新手 - 这相当于说一种类型不能被视为另一种类型而没有明确说明你希望它被这样对待。 int不是float,float不是切片,bool不是字符串。有时您可以使用类型转换来解决此问题,遗憾的是,对于布尔值,您不能简单地使用类型转换。也就是说,string(bool)将无法编译。

有多种方法可以解决这个问题。一种是用true替换fmt.Sprintf("%t",true)。这是更一般的情况,如果true是一个布尔变量,它将返回一个字符串,其中显示"true""false"。它也可以很好地推广到其他类型,例如整数,fmt.Sprintf("%d",myInteger),例如,会将int转换为string

但是......在这种情况下,因为值始终为true,所以不必要,只需将true替换为"true"即可。 "%t"将返回的字符串将是字符串"true",因此无需经历转换麻烦。

相关问题