2016-11-12 6 views
0

Es wäre toll, eine direkte Zuordnung von der Standardbibliothek URL.Query() zu einer Struktur zu haben.Konvertieren von URL.Query (Karte von Slices) zu struct golang

Query() gibt eine Karte wie: Karte [a: [AAAA] b: [bbbb] C: [cccc]]

Die struct wie folgt aussieht:

Typ Ding struct { A String B String C-String }

* ich habe keine Ahnung, warum URL.Query eine Karte mit Array-Elemente im Inneren hart zurück. (Nun .. Ich weiß, why aber ein GET ist wahrscheinlich nicht doppelt params)

+2

Ein GET ist - wahrscheinlich nicht - kann Params dupliziert haben. In diesen Fällen wird es in eine Scheibe von Werten übersetzt. Haben Sie sich das gorilla.schema-Paket angesehen? Ich glaube, es kann den Job machen. –

+0

In meinem Fall würde es mir gut gehen und ich würde gerne eine Ausnahme im Falle von Duplikaten entlassen. Ich habe gorilla.schema angeschaut, es ist großartig! Vielen Dank. – Custodio

Antwort

0

Wie von @ mh-cbon gorilla schema hingewiesen ist die ultimative Lösung hier.

Stattdessen zum Abrufen der QueryParams aus dem URL-Attribut.

func handleRequest(w http.ResponseWriter, r *http.Request) { 
    queryString := r.URL.Query() 
    //...parsing the Values -> map[string][]string 
} 

Der Ansatz des Gorilla-Schema ist r.PostForm an die Decodierfunktion zu versenden.

func handleRequest(w http.ResponseWriter, r *http.Request) { 
    err := decoder.Decode(person, r.PostForm) 
    //...using reflect each struct's property can be called using 
    // the PostForm(url string, data url.Values) signature 

    fmt.Print(person.GoodJobGorilla) 
}