2014-11-18 23 views
13

Sono interessato ad assumere in modo dinamico argomenti dall'utente come input tramite un browser o una CLI per passare tali parametri alla chiamata API REST e quindi costruire l'URL in modo dinamico utilizzando Go che sta per alla fine mi prendo dei dati JSON. Volevo conoscere alcune tecniche in Go che potrebbero aiutarmi a farlo. Un modo ideale che pensavo fosse usare una mappa e popolarla con chiavi di argomento e valori corrispondenti e iterare su di essa e aggiungerla alla stringa dell'URL. Ma quando si tratta di prendere dinamicamente gli argomenti e di compilare la mappa, non sono molto sicuro come farlo in Go. Qualcuno può darmi una mano con qualche frammento di codice in Go?Generatore di URL/Generatore di query in Go

Esempio -

http: //: port = api fetchJsonData & arg1 = val1 & arg2 = val2 & arg3 = val3 ..... & argn = valn

risposta

29

c'è già url.URL che gestisce quel tipo di cose per te.

Per i gestori HTTP (richieste in entrata) è una parte di http.Request (accedervi con req.URL.Query()).

Un ottimo esempio dal funzionario docs:

u, err := url.Parse("http://bing.com/search?q=dotnet") 
if err != nil { 
    log.Fatal(err) 
} 
u.Scheme = "https" 
u.Host = "google.com" 
q := u.Query() 
q.Set("q", "golang") 
u.RawQuery = q.Encode() 
fmt.Println(u) 
+0

Questo è un bel modo. Grazie. Potresti anche suggerire un modo, in cui potrei memorizzare la coppia chiave-valore in una mappa e quindi usare quella mappa per costruire l'URL? – psbits

+1

@psbits 'url.Values' è una mappa (puoi ottenere una copia da u.Query()), puoi usarla per costruire l'URL e usare' u: = url.Parse ("http: // base. com/"); u.RawQuery = yourValues.Encode(); URL: = u.String() ' – OneOfOne

+0

Bene, grazie. Ho fatto qualcosa di simile - {urlMap: = fare (mappa [stringa] string) \t urlMap [ "arg1"] = "val1" \t urlMap [ "arg2"] = "val2" \t url.Scheme = " http" \t url.Host = ip + ":" + DefaultPort \t q: = url.Query() \t per k, _: = gamma urlMap { \t \t q.Set (k, urlMap [k]) \t} \t url.RawQuery = q.Encode() \t fmt.Println (URL)} – psbits

Problemi correlati