在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}
答案 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