在GoLang中将值转换为For循环中的字符串

时间:2016-03-13 23:34:00

标签: string go

在GoLang中,我正在遍历我的表单数据,

for key, values := range r.Form {   // range over map
    for _, value := range values {    // range over []string
        fmt.Println(key, value)
    }
}

我可以像这样将数据打印到终端,但我需要将这些数据作为字符串,以便我可以从for循环外部访问它。

如何在循环结束时将它放在我可以在for循环之外调用的变量中?

我的目标是通过加入这三个字符串

来建立一个网址
var SearchUrl = "https://api.themoviedb.org/3/search/movie?query="
var MovieSearch []string = r.Form["GetSearchKey"]   
var apiKey = "&api_key=e2a"
UrlBuild := []string {SearchUrl, MovieSearch, apiKey}
fmt.Println(UrlBuild) 

我收到此错误

/main.go:71: cannot use MovieSearch (type []string) 
as type string in array or slice literal

MovieSearch来自输入表单。这是搜索关键字。

一旦我有一个字符串,我可以将其传递给进行api调用的函数。

完整功能

func searchHandler(w http.ResponseWriter, r *http.Request) {
  display(w, "search", &Page{Title: "Search"})
   fmt.Println("method:", r.Method) 
        r.ParseForm()
        fmt.Println("GetSearchKey:", r.Form["GetSearchKey"])

for key, values := range r.Form {   // range over map
for _, value := range values {    // range over []string
    fmt.Println(key, value)

  }
}

var SearchUrl = "https://api.themoviedb.org/3/search/movie?query="
 var MovieSearch []string = r.Form["GetSearchKey"]   
var apiKey = "&api_key=ewrfwrfwrcwerc"
UrlBuild := []string {SearchUrl, MovieSearch, apiKey}
fmt.Println(UrlBuild)

fmt.Println(reflect.TypeOf(r.Form["GetSearchKey"] ))
}

错误来自这一行,

UrlBuild := []string {SearchUrl, MovieSearch, apiKey}

2 个答案:

答案 0 :(得分:2)

切片中不能有切片。

func ArrayToString(array []string) string {
    str := strings.Join(array, "")
    return str

}
UrlBuild := []string {SearchUrl, ArrayToString(MovieSearch), apiKey}
fmt.Println(UrlBuild) 
UrlBuildString := ArrayToString(UrlBuild)

OR

UrlBuildString := ArrayToString([]string{SearchUrl, ArrayToString(MovieSearch), apiKey}

_________________ FULL _______________

func ArrayToString(array []string) string {
    str := strings.Join(array, "")
    return str

}
func searchHandler(w http.ResponseWriter, r *http.Request) {
  display(w, "search", &Page{Title: "Search"})
   fmt.Println("method:", r.Method) 
        r.ParseForm()
        fmt.Println("GetSearchKey:", r.Form["GetSearchKey"])

for key, values := range r.Form {   // range over map
for _, value := range values {    // range over []string
    fmt.Println(key, value)

  }
}

var SearchUrl = "https://api.themoviedb.org/3/search/movie?query="
 var MovieSearch []string = r.Form["GetSearchKey"]   
var apiKey = "&api_key=ewrfwrfwrcwerc"
UrlBuild := []string {SearchUrl, ArrayToString(MovieSearch), apiKey}
fmt.Println(UrlBuild)
OUTPUT_STRING := ArrayToString(UrlBuild)
}

答案 1 :(得分:1)

这个问题看起来并不那么糟糕,尽管我可能误解了这个问题。有很多方法可以构建这些字符串。

使用串联(慢)考虑以下方法:

s := []string{}
for key, values := range r.Form {   // range over map
    for _, value := range values {    // range over []string
        s = append(s, fmt.Sprintf("%s, %s", key, value))
    }
}
data := strings.Join(s, ";")

更多关于concat的例子可以在这里看到:http://herman.asia/efficient-string-concatenation-in-go