Wie die string-Formatierung für Strukturen?
Habe ich ein struct mit dem Namen Element
type Item struct {
Limit int
Skip int
Fields string
}
item := Item {
Limit: 3,
Skip: 5,
Fields: "Valuie",
}
wie bekomme ich das Feld name, Wert und kommen Sie in eine Zeichenfolge.
etwas wie:
item := Item {
Limit: 3,
Skip: 5,
Fields: "Valuie",
}
einen string der so etwas wie
"Limit=3&Skip=5&Fields=Valuie"
Und ich habe versucht, Reflexionen zu bekommen konvertieren Schnittstelle zu Feld-Wert-Karte so weit. Bin ich auf dem richtigen Weg? Denn ich denke, es hätte einige bessere Lösungen. Und danke!
m, _ = reflections.Items(data)
for k, v := range m {
fmt.Printf("%s : %s\n", k, v)
}
Habe ich
Limit : %!s(int=3)
Skip : %!s(int=5)
Fields : Valuie
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie %v statt %s verwenden. %s übernehmen wird, einem string, etwas, das in eine Zeichenfolge konvertiert werden (z.B. byte-array) oder ein Objekt mit einem String () - Methode.
Mit %v überprüfen Sie den Typ und richtig anzeigen.
Beispiel der String () - Methode rufen Sie mit %s mit deinem Beispiel: http://play.golang.org/p/bxE91IaVKj
v = &url.Values{}
für?http://localhost:3000/?limit=3&skip=5
gibt es eine einfache Lösung?Gibt es keine Notwendigkeit, verwenden Sie reflektion, für diese. Schreiben Sie einfach den code für die Typen, die Sie haben.
Dieser code ist einfach, lesbar, und Sie brauchen nicht zu denken, es zu schreiben. Es sei denn, Sie haben eine viel von Typen, die Sie gehen zu konvertieren, um die Werte dann würde ich nicht einmal denken über die Magie der Reflexion-basierte Lösung zu diesem problem.
Für jede Struktur, die Sie verwenden können, Reflexion und
url.Werte
aus dernet/url
Paket:Beispiel auf spielen.
Natürlich, dieser code ist nicht in der Lage, verschachtelte Datenstrukturen oder Scheiben, so würden Sie brauchen, zu erweitern
den code, wenn Sie verwenden andere Datenstrukturen zu machen, mehr allgemein. In diesem Beispiel jedoch sollte
erhalten Sie begonnen.
FieldByNameFunc
bricht die Suche ab, sobaldtrue
zurückgegeben wird, sofalse
ist der richtige Wert hier.Werfen Sie einen Blick auf go-querystring. Es wandelt eine Struktur in den URL-query-Parameter (Ihre erwartete Ausgabe).