Benutzerdefiniertes Tag-Parsing
Tags per Reflection lesen
Benutzerdefiniertes Tag-Parsing ist eine kostenlose Go Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Go Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Tags selbst auslesen
Sie können eigene Tag-Schlüssel definieren und sie zur Laufzeit mit dem Paket reflect auslesen. So können Sie ein durch Metadaten gesteuertes, individuelles Verhalten implementieren.
reflect.TypeOf
reflect.TypeOf gibt einen Type zurück, der einen Wert beschreibt. Aus einem Struct-Type können Sie dessen Felder untersuchen.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
t := reflect.TypeOf(User{})
fmt.Println(t.Kind(), t.NumField())
}Felder durchlaufen
Mit NumField und Field(i) können Sie jedes Feld eines Struct-Typs durchlaufen.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
Age int
}
func main() {
t := reflect.TypeOf(User{})
for i := 0; i < t.NumField(); i++ {
fmt.Println(t.Field(i).Name)
}
}Ein Feld-Tag auslesen
Jedes Feld besitzt ein Tag vom Typ reflect.StructTag. Rufen Sie .Get(key) auf, um den Wert eines bestimmten Tags auszulesen.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Full Name\""
}
func main() {
f := reflect.TypeOf(User{}).Field(0)
fmt.Println(f.Tag.Get("label"))
}Ein eigenes Tag definieren
Sie können einen beliebigen Tag-Schlüssel erfinden. Hier beschreibt ein eigenes label-Tag einen verständlichen Namen für jedes Feld.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email Address\""
City string "label:\"City\""
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
fmt.Println(f.Name, "->", f.Tag.Get("label"))
}
}Tag.Lookup für optionale Tags
Tag.Lookup(key) gibt den Wert und einen booleschen Wert zurück. Verwenden Sie die Methode, um Felder zu behandeln, bei denen Ihr Tag möglicherweise fehlt.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
Token string
}
func main() {
t := reflect.TypeOf(Form{})
for i := 0; i < t.NumField(); i++ {
v, ok := t.Field(i).Tag.Lookup("label")
fmt.Println(t.Field(i).Name, v, ok)
}
}Auch Feldwerte auslesen
Kombinieren Sie reflect.ValueOf mit dem Type, um sowohl das Tag als auch den aktuellen Wert jedes Feldes auszulesen.
package main
import (
"fmt"
"reflect"
)
type Form struct {
Email string "label:\"Email\""
}
func main() {
f := Form{Email: "a@b.com"}
t := reflect.TypeOf(f)
v := reflect.ValueOf(f)
fmt.Println(t.Field(0).Tag.Get("label"), "=", v.Field(0))
}Tag-Optionen analysieren
Wenn Ihr Tag-Wert Optionen enthält (etwa name,opt), teilen Sie ihn mit strings.Split am Komma auf.
package main
import (
"fmt"
"strings"
)
func main() {
tag := "name,omitempty"
parts := strings.Split(tag, ",")
fmt.Println("name:", parts[0], "opts:", parts[1:])
}Ein kleiner Anwendungsfall
Zusammengeführt ergibt sich daraus eine einfache Zuordnung von Struct zu Bezeichnung, die eine UI-Schicht zum Darstellen von Formularbezeichnungen verwenden könnte.
package main
import (
"fmt"
"reflect"
)
type Profile struct {
Name string "label:\"Your Name\""
Bio string "label:\"About You\""
}
func main() {
t := reflect.TypeOf(Profile{})
labels := map[string]string{}
for i := 0; i < t.NumField(); i++ {
f := t.Field(i)
labels[f.Name] = f.Tag.Get("label")
}
fmt.Println(labels)
}Kosten von Reflection
Reflection ist leistungsfähig, aber langsamer als direkter Code und umgeht Prüfungen zur Compile-Zeit. Verwenden Sie sie für Framework-Funktionen, nicht in häufig durchlaufenen Schleifen.
Pointer und reflect
Wenn Sie einen Pointer haben, rufen Sie reflect.TypeOf(v).Elem() auf, um vor der Untersuchung der Felder den zugrunde liegenden Struct-Typ zu erreichen.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string "label:\"Name\""
}
func main() {
u := &User{}
t := reflect.TypeOf(u).Elem()
fmt.Println(t.Field(0).Tag.Get("label"))
}Kurzer Check
Welche Methode liest den Wert eines eigenen Tag-Schlüssels aus einem Struct-Feld, das über Reflection ermittelt wurde?
Zusammenfassung
Eigene Tags analysieren:
- Verwenden Sie
reflect.TypeOfund durchlaufen Sie die Felder field.Tag.Get/Lookuplesen Tag-Werte aus- Teilen Sie Werte auf, um Optionen zu analysieren
- Leistungsfähig, aber langsamer; verwenden Sie dies für Framework-Funktionen
Häufig gestellte Fragen
Ist die Lektion „Benutzerdefiniertes Tag-Parsing“ kostenlos?
Ja — der vollständige Text von „Benutzerdefiniertes Tag-Parsing“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Go Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Go Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Benutzerdefiniertes Tag-Parsing“?
Tags per Reflection lesen Du übst Go Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Go Academy zu starten?
Keine Vorkenntnisse erforderlich. Go Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Benutzerdefiniertes Tag-Parsing“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Go Academy-Lektion Code schreiben und ausführen?
Ja. Jede Go Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Was sind Struct-Tags?
- JSON-Tags
- Validierungsbibliotheken
- Benutzerdefiniertes Tag-Parsing