it-swarm.com.de

Wie kann ich in Go die Zeichenfolgendarstellung einer Struktur abrufen?

Für meine Anwendung spielt es keine Rolle, ob die Zeichenfolge für den Menschen lesbar ist oder nicht.

51
abw333

Eine beliebte Methode zum Codieren von Strukturen in Zeichenfolgen ist die Verwendung von JSON .

Sie haben bestimmte Einschränkungen, z. B. nicht alle Informationen zu erhalten (z. B. den spezifischen Typ jedes Felds), nur exportierte Felder zu serialisieren und keine rekursiven Werte zu verarbeiten. Es ist jedoch 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))
}

Gib diese Ausgabe:

{"Int":42,"String":"Hello World!","ByteSlice":"AAECAwQ="}

https://play.golang.org/p/sx-xdSxAOG

65
ANisus

Wenn es sich um eine "Einweg" -Serialisierung handelt (zum Debuggen oder Protokollieren oder was auch immer), dann ist fmt.Printf("%#v", var) sehr schön. (Update: Um die Ausgabe in eine Zeichenfolge zu setzen, anstatt sie zu drucken, verwenden Sie str := fmt.Sprintf("%#v", var).

Wenn es auf die Größe ankommt, kannst du %v, aber ich mag %#v, da es auch die Feldnamen und den Namen des Strukturtyps enthält.

Eine dritte Variante ist %+v, das die Feldnamen enthält, aber nicht den Strukturtyp.

Sie sind alle oben in der fmt-Dokumentation dokumentiert.

Wenn Sie eine bidirektionale Serialisierung benötigen, sind JSON, Gob oder XML die einfachsten/integrierten Optionen in Go. Weitere Informationen finden Sie in den Codierungspaketen .

71

sie können mit diesem struct-Empfänger auch eine Funktion hinzufügen.

// URL : Sitemap Xml
type URL struct {
    Loc string `xml:"loc"`
}

// URLSET : Sitemap XML
type URLSET struct {
    URLS []URL `xml:"url"`
}

// converting the struct to String format. 
func (u URL) String() string {
    return fmt.Sprintf(u.Loc)
}

Wenn Sie dieses Strukturfeld drucken, wird eine Zeichenfolge zurückgegeben.

fmt.Println(urls.URLS)
4
Santosh Pillai

Durch das Anhängen einer String () - Funktion an eine benannte Struktur können wir eine Struktur in eine Zeichenfolge konvertieren.

package main

import "fmt"

type foo struct {
    bar string
}

func (f foo) String() string {
    return fmt.Sprintf("Foo Says: %s", f.bar)
}

func main() {
    fmt.Println(foo{"Hello World!"})
}
output:
Foo Says: Hello World!
0
Arghyadeb