2016-03-13 2 views
0

В GoLang я пробегаем по моей форме данных, как это,Преобразование Value в строку In For Loop В GoLang

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

Я могу напечатать данные на терминале, как это, но мне нужно эти данные, чтобы быть поэтому я могу получить доступ к нему из-за цикла for.

Как я могу поместить это в переменную, которую я могу вызывать за пределами цикла for, когда цикл завершен?

Моя цель здесь заключается в создании URL, вступив эти три строки

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

Что плохого в том, данные на карте? – Tyler

+0

Что именно вы хотите? Добавьте пример. – peterSO

+0

«Как я могу поместить это в переменную, которую я могу вызывать за пределами цикла for» - возможно, путем ее хранения в переменной, которую вы определили вне цикла? – creker

ответ

2

Вы не можете иметь кусочек в пределах среза.

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

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

ИЛИ

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

Эй, спасибо большое за попытку помочь мне. Не могли бы вы немного разобраться в этом. – wuno

+0

Да ... Я просто через это. Он превращает массив в строку, присоединяя его – XXX

+0

Прохладный, спасибо человеку, поэтому у меня есть 2 строки и 1 входное значение из формы. значение из формы говорит, что это строка, когда я проверяю ее с отражением. Но я думаю, что это может быть массив строк, и это меня убивает? если это так, я даже не уверен, как использовать эту функцию, чтобы объединить все это. Если вы посмотрите на мой вопрос и увидите эти деревья vars SearchUrl MovieSearch и apiKey, не могли бы вы обновить свой ответ, как объединить все эти элементы в одну строку var, чтобы я мог вызвать этот var в другой функции. – wuno

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

+0

Но поскольку я строю URL-адрес, имеет ли смысл делать это, как будто я пытаюсь? Я только что редактировал мой вопрос. – wuno