0Pricing
Go Academy · Lektion

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.TypeOf und durchlaufen Sie die Felder
  • field.Tag.Get / Lookup lesen 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

  1. Was sind Struct-Tags?
  2. JSON-Tags
  3. Validierungsbibliotheken
  4. Benutzerdefiniertes Tag-Parsing
← Zurück zu Go Academy