Direkt zum Hauptinhalt springen
eLearner.app
Modul 5 · Lektion 4 von 524/50 im Kurs~12 min
Lektionen des Moduls (4/5)

Feld-Tags und JSON

Tags für Strukturfelder sind Metadatenzeichenfolgen, die über Reflektion gelesen werden durch Bibliotheken wie encoding/json, encoding/xml, Validatoren, ORMs. Sie werden zwischen Backticks (Rohzeichenfolge) direkt nach dem Feldtyp geschrieben.

Syntax

Go
type User struct {
    Name string `json:"nome"`
    Age  int    `json:"eta,omitempty"`
}

Formatkonvention: key:"value" durch Leerzeichen getrennt (NICHT Kommas) für mehrere Schlüssel:

Go
type User struct {
    Email string `json:"email" validate:"required,email"`
}

JSON-Tag: Optionen

Die häufigste Option ist json, die von encoding/json verwendet wird:

| Tag | Wirkung | | ----------------------- | --------------------------------------------------- | ------------ | | json:"nome" | Benennt das Feld in der JSON-Ausgabe | in nome um | | json:"nome,omitempty" | Lässt das Feld weg, wenn es seinen Nullwert | hat | | json:"-" | Dieses Feld nicht serialisieren/deserialisieren | | json:",omitempty" | Behält den Go-Feldnamen bei, jedoch mit omitempty |

Go
type User struct {
    Name     string `json:"nome"`
    Age      int    `json:"eta,omitempty"`
    Password string `json:"-"`
}

u := User{Name: "Ada", Age: 0, Password: "segreto"}
b, _ := json.Marshal(u)
fmt.Println(string(b))   // {"nome":"Ada"}

Age wird weggelassen (Nullwert 0 + omitempty); Password ist gänzlich ausgeschlossen.

Marschall und Unmarschall

Go
// struct -> JSON
b, err := json.Marshal(u)

// JSON -> struct (needs a POINTER)
var u2 User
err = json.Unmarshal(b, &u2)

Unmarshal akzeptiert nur einen Zeiger, da in den geschrieben werden muss Felder des Werts.

Andere gängige Tags

  • xml:"..."encoding/xml
  • yaml:"..." – yaml.v3
  • db:"..." – sqlx / pgx
  • validate:"..." – Go-Playground/Validator
  • form:"..." – Gin/Echo-Bindung

Bibliotheken lesen sie durch Reflexion (reflect.StructTag.Get("json")): Sie sind nur Zeichenfolgen, bis jemand sie interpretiert.

Probieren Sie es aus

Übung#go.m5.l4.e1
Versuche: 0Wird geladen…

Fügen Sie das Tag „json:“nome“ zum Feld „Name“ und das Tag „json:“eta“ zum Feld „Alter“ hinzu.

Editor wird geladen…
Hinweis anzeigen

Tags sind Rohzeichenfolgen zwischen Backticks direkt nach dem Feldtyp.

Lösung nach 3 Versuchen verfügbar

Übung#go.m5.l4.e2
Versuche: 0Wird geladen…

Fügen Sie dem Feld „Alter“ die Option „omitempty“ hinzu: Sie muss weggelassen werden, wenn sie 0 ist.

Editor wird geladen…
Hinweis anzeigen

Nach dem Namen stehen Optionen, getrennt durch ein Komma: json:"nome,omitempty".

Lösung nach 3 Versuchen verfügbar

Quiz#go.m5.l4.e3
Bereit

Was wird mit den Tags json:"nome" und json:"eta" gedruckt?

Go
u := User{Name: "Ada", Age: 36}
b, _ := json.Marshal(u)
fmt.Println(string(b))
Antwortoptionen

Zusammenfassung

  • Tags sind Rohzeichenfolgen zwischen Backticks: `key:"value" key2:"value2"`.
  • json:"nome": rename. omitempty: omit if zero value. -: exclude.
  • NON-exported (lowercase) fields are ignored by encoding/json.
  • json.Marshal(v)json.Unmarshal(data, &v) (pointer).
  • Same mechanism for xml, yaml 0db 1validate 2form, …