Bestimmte Zeichen in Formschlüsseln und Werten müssen maskiert werden, z. B. &
oder =
. Um diese Fehler zu vermeiden, verwenden Sie am besten den Typ url.Values
.
Es Karten string
Schlüssel zur Liste der string
Werte. Wenn Sie also einen anderen Wert als string
haben, müssen Sie zuerst in string
konvertieren. Am einfachsten ist es, fmt.Sprint()
oder strconv.Itoa()
zu verwenden (für weitere Optionen siehe Golang: format a string without printing?).
vs := url.Values{}
vs.Set("a", fmt.Sprint(123))
vs.Set("b", "xyz")
vs.Set("tricky", "= & =")
b := bytes.NewBufferString(vs.Encode())
url.Values
weiß, wie man richtig Schlüssel und Werte zu entkommen. Die obige vs.Encode()
zum Beispiel Ausgänge (versuchen Sie es auf dem Go Playground):
a=123&b=xyz&tricky=%3D+%26+%3D
Hinweis:
Wie url.Values
ist nur eine Karte (mit map[string][]string
als zugrunde liegende Typ), können Sie auch eine einfache verwenden composite literal zu erstellen und füllen:
vs := url.Values{
"a": {strconv.Itoa(123)},
"b": {"xyz"},
"tricky": {"= & ="},
}
b := bytes.NewBufferString(vs.Encode())
diese Variante Versuchen sie, auf die Go Playground.
Was meinst du mit besser? – noel
@Shakabra, um die Manipulation von Strings zu vermeiden – exebook
Sie manipulieren keine Strings, Sie haben nur ein String-Literal. Du meinst, ohne Werte in der verschlüsselten Form angeben zu müssen? – icza