1
我遇到接口的一个奇怪问题,当我尝试打印一个值时Println添加方括号。我相信这是因为该界面包含切片,但我不确定应该如何迭代它们。Println打印方括号但界面不是一个切片
我很确定这是一个新手问题,但我花了很多时间寻找线索,找不到任何。
而且我不能没有使用去复制它,所以这里的,我实际使用的代码:
package main
import "fmt"
import "github.com/belogik/goes"
import "net/url"
func getConnection() (conn *goes.Connection) {
conn = goes.NewConnection("localhost", "9200")
return
}
func main() {
conn := getConnection()
var query = map[string]interface{}{
"query": map[string]interface{}{
"bool": map[string]interface{}{
"must": map[string]interface{}{
"match_all": map[string]interface{}{},
},
},
},
"from": 0,
"size": 3,
"fields": []string{"name"},
}
extraArgs := make(url.Values)
searchResults, err := conn.Search(query, []string{"myindex"}, []string{"mytype"}, extraArgs)
if err != nil {
panic(err)
}
result := searchResults.Hits.Hits
for _,element := range result {
name := element.Fields["name"]
fmt.Println(name)
fmt.Printf("%#v\n", name)
}
}
此输出:
[One]
[]interface {}{"One"}
[Two]
[]interface {}{"Two"}
[Three]
[]interface {}{"Three"}
但是,如果我尝试循环遍历“名称“像这样:
for _, e := range name {
fmt.Println(e)
}
我得到”无法范围超过名称(键入界面{})“
谢谢,我现在明白了,也是'name。([] interface {})[0]'给了我我想要的东西,因为我不关心其他值。 – 2014-10-04 14:38:04
@PokazC记住,如果切片是空的,那会导致运行时恐慌。 – OneOfOne 2014-10-05 05:11:14