Gibt es ein Paket für Marschall in die und aus der x-www-form-urlencoding in golang
Möchte ich dem Marschall in die und aus der x-www-form-urlencoding, ähnlich wie die, die Sie tun können, es mit json oder xml. Gibt es ein vorhandenes Paket zu tun, oder gibt es irgendwelche Dokumente, um über die Umsetzung selber ein, wenn keiner vorhanden ist?
- Netto/url in stdlib tut, was Sie wollen, glaube ich. Beachten Sie, dass es einen soliden http-client und-server, standard, haben diese Dinge zu tun.
- ParseQuery gibt eine map[string][]string, was sehr nützlich ist, aber es nicht Marschall direkt auf eine Struktur, die als 'encoding/json' tut.
- Ich habe keine Ahnung, wo du die information bekam. Es ist falsch, gemäß der Dokumentation, und meine Erfahrung mit ihm.
- Wenn Sie wollen, zu argumentieren, es würde ziemlich gut sein, um einen link zu der Dokumentation, die Sie bekommen Ihre Informationen aus. Für mich, ich war auf der Suche auf
net/url.ParseQuery
gibtnet/url.Values
definiert alstype Values map[string][]string
. weitere Informationen finden Sie hier: golang.org/pkg/net/url/#ParseQuery - Das macht es zu einem url.Werte geben, nicht eine map[string] [] - string-Sie können die Konvertierung zwischen Ihnen, aber Sie sind nicht austauschbar. Die erstere hat eine Methode, die das tut, was Sie wollen.
- Ich sehe nicht, wo Werte implementiert, eine Codierung oder Decodierung-Schnittstelle, die ist, was ich fragte. Nicht ein Weg, um analysieren Sie die Zeichenfolge, einen Weg zu Marschall es.
- Der link oben beschreibt ein
.Encode()
Methode, die tut, was ich glaube, was du beschreibst. - Es nicht Decodieren, das ist viel härter. Sie können marshal an, aber nicht aus.
- Was ist der Unterschied zwischen Dekodieren und die genaue Funktion Sie verknüpft?
- Einer von Ihnen Streckenposten direkt in beliebige Strukturen und das andere einfach die Ausgänge a map[string][]string-Objekt. Wenn Sie wirklich nicht verstehen, ich würde empfehlen, Sie eine Frage stellen, statt sich dieses Gespräch in einem Kommentarfeld eines Toten Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
gorilla/schema ist sehr beliebt und gut gepflegt:
z.B.
goforms ist auch eine alternative.
Update-23. Mai 2015:
Habe ich mit gorilla/schema für ein paar Jahre jetzt und haven ' T hatte keine großen Probleme mit ihm. Ich benutze es in Verbindung mit vala für die Eingaben überprüfen (nicht nil ist, zu kurz, zu lang, etc), bevor Sie auf die DB.
Ich gerade gefunden https://github.com/ajg/form das ist genau das, was ich suchte. Es ist auch https://github.com/gorilla/schema ausschließlich für die Decodierung und https://github.com/google/go-querystring ausschließlich für die Codierung.
https://github.com/google/go-querystring ist gut, aber nicht unterstützt-Karten (und Scheiben von Karten).
Begann ich https://github.com/drewlesueur/querystring für die Karte zu unterstützen.
(Es unterstützt keine Strukturen noch nicht, aber pull-Anfragen willkommen).
Die
"github.com/pasztorpisti/qs"
- Paket können auch Marschall/unmarshal Strukturen zu/von query-strings undPOST
-ed-Formen.Beispiel:
Möglich Verkaufsargumente von diesem Paket:
snake_case
im query-string. Sie müssen nicht fügen Sieqs:"field_name"
auf die struct-Feld-tag für diese. Dieses Verhalten kann geändert werden.bool
,[]byte
) und hinzufügen von Unterstützung für neue Arten verändern, ohne die Art selbst (z.B.: hinzufügen von Rangier-und/oder unmarshaling fürtime.Time
). Hier ist ein Beispiel.req
option, um die struct-Feld-tag, um zu machen dem Feld, während unmarshaling. Beachten Sie, dass dies eher Validierung als unmarshaling und golang-Bibliotheken gehen in der Regel für die Trennung zwischen den beiden, aber ich fand diese option sehr nützlich, weil es erforderlich ist, oft ist es einfach und liest sich gut. Für diejenigen, die vermeiden wollen, dassreq
und tun diese überprüfung, getrennt nach unmarshaling: es ist einnil
- tag", dass ist so ziemlich das gleiche wie die Standard -opt
(das steht für "optional"), außer, dass es nicht initialisieren null-Zeiger, wenn die vorgegebenen Felder nicht in deren Marshalling rückgängig gemacht wurde query-string. Auf diese Weise validator-code erkennen kann, die fehlenden Felder von der Suche nach der null-Zeiger nach unmarshaling.Den
qs
Paket kann sagen, ob ein komplexer Typ (z.B.: Ihre Struktur), ist marshalable, bevor Sie tatsächlich Marshalling eine Instanz dieses Typs. Die meisten Marshaller-Pakete können nicht dies tun, auch nach Marshalling eine Instanz des angegebenen Typs! Die meisten marshalers untersuchen, komplexe Typen zu Fuß das Objekt gemarshallt und die überprüfung der Arten nur für die besuchten sub-Objekte. Dies bedeutet, wenn das komplexe Objekt enthält einen container (Zeiger, anzeigen oder Scheibe), die leer ist, dann wird der Elementtyp des Containers gar nicht untersucht. Im Vertragqs
geht die Struktur des Komplexes Objekt (anstelle des Objekts selbst) während der Erstellung der Marshaller für den Typ, so es scheitert, wo es zu scheitern. Betrachten Sie den folgenden code in die standard -"encoding/json"
Paket erfolgreich Streckenposten ein Objekt, dessen Typ enthält eine nicht-marshalable Typ: