2014-11-18 11 views
13

Ich möchte Argumente dynamisch vom Benutzer als Eingabe über einen Browser oder eine CLI übernehmen, um diese Parameter an den REST-API-Aufruf zu übergeben und die URL dynamisch mit Go zu erstellen Letztendlich hol mir ein paar JSON-Daten. Ich wollte einige Techniken in Go kennen, die mir dabei helfen könnten. Ein idealer Weg, den ich dachte, war, eine Karte zu benutzen und sie mit Argumentenschlüsseln und entsprechenden Werten aufzufüllen und darüber zu iterieren und an die URL-Zeichenkette anzufügen. Aber wenn es darum geht, die Argumente dynamisch zu nehmen und die Karte zu füllen, bin ich nicht sehr sicher wie geht das in Go? Kann mir jemand mit einem Code-Code in Go helfen?Builder für URL-Erstellung/Abfrage in Go

Beispiel -

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

Antwort

29

Es gibt bereits url.URL: zu Griffe diese Art von Dingen für dich.

Für HTTP-Handler (eingehende Anfragen) ist es ein Teil von http.Request (Zugriff mit req.URL.Query()).

Ein sehr gutes Beispiel von den offiziellen 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

Dies ist eine nette Art und Weise. Vielen Dank. Könnten Sie auch einen Weg vorschlagen, wo ich das Schlüssel-Wert-Paar in einer Karte speichern und dann diese Karte verwenden könnte, um die URL zu erstellen? – psbits

+1

@psbits 'url.Values' ist eine Karte (Sie können eine Kopie von u.Query() erhalten), Sie können sie verwenden, um die URL zu erstellen, dann verwenden Sie' u: = url.Parse ("http: // base. com/"); u.RawQuery = yourValues.Encode(); URL: = u.String() ' – OneOfOne

+0

Nun, danke. Ich habe so etwas wie dieses - {urlMap: = machen (map [string] string) \t urlMap [ "arg1"] = "val1" \t urlMap [ "arg2"] = "val2" \t url.Scheme = " http“ \t url.Host = ip + ":" + Default \t q: = url.Query() \t für k, _: = range urlMap { \t \t q.Set (k, urlMap [k]) \t} \t url.RawQuery = q.Encode() \t fmt.Println (url)} – psbits