Für meine Anwendung ist es egal, ob die Zeichenfolge für Menschen lesbar ist oder nicht.In Go, wie bekomme ich die String-Repräsentation einer Struktur?
Antwort
Eine gängige Methode zum Codieren von Strukturen in Strings ist die Verwendung von JSON.
Sie haben bestimmte Einschränkungen, z. B. dass Sie nicht alle Informationen erhalten (z. B. den spezifischen Typ der einzelnen Felder), nur exportierte Felder serialisieren und keine rekursiven Werte verarbeiten. Aber es ist eine einfache Standardmethode zum Serialisieren von Daten.
Arbeitsbeispiel:
package main
import (
"fmt"
"encoding/json"
)
type s struct {
Int int
String string
ByteSlice []byte
}
func main() {
a := &s{42, "Hello World!", []byte{0,1,2,3,4}}
out, err := json.Marshal(a)
if err != nil {
panic (err)
}
fmt.Println(string(out))
}
Geben Sie diese Ausgabe:
{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}
Genau das, was ich brauchte! +1 zu Ihnen – abw333
Ich bemerkte Ihre zweite Frage und welchen Zweck Sie haben. JSON kann nützlich sein, aber nicht, wenn die Ausgabezeichenfolge zum Erstellen eines Hashs zum Testen der Gleichheit verwendet werden soll. Sie werden Probleme mit Karten haben, wie Ask bereits erwähnt hat. Dies gilt auch für 'fmt.Sprintf'. – ANisus
Wusste nicht, dass Schlüssel groß geschrieben werden müssen, um in JSON angezeigt zu werden. – jiyinyiyong
Wenn es sich um eine "one way" Serialisierung ist (für das Debuggen oder die Protokollierung oder was auch immer), dann fmt.Printf("%#v", var)
ist sehr nett. (Update: die Ausgabe in einen String zu setzen, anstatt sie zu drucken, verwenden Sie str := fmt.Sprintf("%#v", var)
Wenn size matters Sie %v
verwenden können, aber Ich mag %#v
, weil es auch werden die Feldnamen und den Namen des Strukturtyps enthalten..
Eine dritte Variante ist %+v
, die die Feldnamen enthalten werden, nicht aber der Strukturtyp.
Sie sind alle an der Spitze dokumentieren der fmt documentation.
Wenn Sie zwei-Wege-Serialisierung JSON, Gob o r XML sind die einfachsten/integrierten Optionen in Go, siehe encoding packages.
Danke für Ihre Antwort. Ich hätte wahrscheinlich in meiner Frage angegeben, dass ich den Wert in meinem Programm und nicht in der Konsole suchen möchte. Insbesondere möchte ich dann die Zeichenfolge in ein Byte-Array konvertieren. Wenn ich "[] byte (fmt.Printf ("% v ", var))" mache, beschwert sich das Programm über "multiple-value fmt.Printf() im einwertigen Kontext". Ich gehe davon aus, dass Printf den String-Wert nicht zurückgibt, sondern nur auf die Konsole ausgibt. Weißt du, wie ich das beheben kann? – abw333
Ich habe herausgefunden, wie man das mit der Antwort von ANisus macht, aber +1 für eine gute Antwort. – abw333
Wenn Sie es im Programm benötigen, verwenden Sie 'fmt.Sprintf' anstelle von Printf. Wenn Sie JSON verwenden, sollten Sie darauf achten, dass die Map-Werte bei jedem Lauf möglicherweise nicht in der gleichen Reihenfolge zurückgegeben werden (obwohl dies auch für den fmt printf der Fall ist, habe ich dies nicht überprüft). –
- 1. Wie eine Struktur in einer Struktur in go speichern?
- 2. Wie bekomme ich IntPtr zu einer Struktur?
- 3. Wie kann ich die folgende JSON-Struktur in Go analysieren
- 4. Go: Deklaration eines Slice in einer Struktur?
- 5. Wie bekomme ich Dateilänge in Go?
- 6. Wie bekomme ich ein beliebiges Element einer Karte in Go?
- 7. Wie bekomme ich "virtualhost" -Funktionalität in Go?
- 8. initialisieren eingebettet Struktur in Go
- 9. Ist die Go-Map-Struktur Thread-sicher?
- 10. Wie bekomme ich XML-Struktur mit jquery?
- 11. Abstellungs Json Daten in einer bestimmten Struktur in Go
- 12. Wie finde ich die Größe einer Struktur?
- 13. Wie kann ich eine Struktur innerhalb einer Struktur verschachtelt zugreifen
- 14. Wie bekomme ich den gesamten Speicher/RAM in GO?
- 15. Wie bekomme ich die Struktur einer Google Protobuf-Nachricht ohne die Definition
- 16. Konvertieren von GO-Map in Struktur
- 17. Wie bekomme ich die nächste Zeile von einer Datei suchen?
- 18. Wie kann ich die Lebensdauer einer Struktur auf die einer übergeordneten Struktur beschränken?
- 19. In SQL Wie kann ich die Struktur einer Ergebnismenge beschreiben?
- 20. Wie kann ich die Deklaration einer Struktur in C verstecken?
- 21. Wie kann ich die Adresse einer Struktur in C bekommen?
- 22. Wie bekomme ich eine bestimmte TIME_ZONE_INFORMATION-Struktur in Win32?
- 23. Wie bekomme ich die Struktur/Template ID nach Struktur/Template Name
- 24. Wie bekomme ich die Dauer einer Videodatei?
- 25. Wie bekomme ich alle Struktur unter einem Paket in Golang?
- 26. Go-lang Projekt Ordner Struktur Konvention
- 27. Wie bekomme ich die Feldnamen einer Datenbanktabelle?
- 28. Wie bekomme ich die Eigenschaften einer Bitmap?
- 29. Wie bekomme ich die Abonnenten einer Veranstaltung?
- 30. Wie bekomme ich die URL einer Anfrage?
Versuchen Sie eine Struktur zu serialisieren? Sie sollten wirklich dafür Gob verwenden. – rmmh