Parsing af brugerdefinerede tags
Læs tags via reflection
Parsing af brugerdefinerede tags er en gratis Go Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Go Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Go Academy-kurset indeholder 4 lektioner i alt.
Læsning af tags selv
Du kan definere dine egne tagnøgler og læse dem under kørsel med reflect-pakken. Det lader dig opbygge brugerdefineret adfærd, der styres af metadata.
reflect.TypeOf
reflect.TypeOf returnerer en Type, der beskriver en værdi. Fra en Type for en struktur kan du inspicere dens felter.
package main
import (
"fmt"
"reflect"
)
type User struct {
Name string
}
func main() {
t := reflect.TypeOf(User{})
fmt.Println(t.Kind(), t.NumField())
}Gennemløb af felter
NumField og Field(i) lader dig gennemløbe alle felter i en strukturtype.
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)
}
}Adgang til et felts tag
Hvert felt har et Tag af typen reflect.StructTag. Kald .Get(key) for at læse en bestemt tagværdi.
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"))
}Definition af et brugerdefineret tag
Du kan opfinde en hvilken som helst tagnøgle. Her beskriver et brugerdefineret label-tag et brugervenligt navn for hvert felt.
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 til valgfrie tags
Tag.Lookup(key) returnerer værdien og en boolsk værdi. Brug den til at håndtere felter, der muligvis ikke har dit tag.
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)
}
}Læs også feltværdier
Kombinér reflect.ValueOf med typen for at læse både tagget og den aktuelle værdi af hvert felt.
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))
}Analyse af tagindstillinger
Hvis din tagværdi indeholder indstillinger (som name,opt), skal du selv opdele den med strings.Split ved kommaet.
package main
import (
"fmt"
"strings"
)
func main() {
tag := "name,omitempty"
parts := strings.Split(tag, ",")
fmt.Println("name:", parts[0], "opts:", parts[1:])
}Et lille anvendelseseksempel
Samlet set kan du opbygge et enkelt etiketkort fra en struktur, som et brugergrænsefladelag kan bruge til at vise formularfelter.
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)
}Refleksionens omkostninger
Refleksion er effektiv, men langsommere end direkte kode og omgår kontroller ved kompilering. Brug den til funktioner i framework-stil, ikke i løkker, der kører ofte.
Pointers og reflect
Hvis du har en pointer, skal du kalde reflect.TypeOf(v).Elem() for at nå den underliggende strukturtype, før du inspicerer felterne.
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"))
}Hurtigt tjek
Hvilken metode læser værdien af en brugerdefineret tagnøgle fra et strukturfelt, der er hentet via refleksion?
Opsummering
Analyse af brugerdefinerede tags:
- Brug
reflect.TypeOf, og gennemløb felterne field.Tag.Get/Lookuplæser tagværdier- Opdel værdier for at analysere indstillinger
- Effektivt, men langsommere; brug det til framework-funktioner
Lær Go med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 51
- Lektioner
- 203
Ofte stillede spørgsmål
Er lektionen “Parsing af brugerdefinerede tags” gratis?
Ja — alle 3 lektioner i læringssporet Go Academy, inklusive “Parsing af brugerdefinerede tags”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Go Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Parsing af brugerdefinerede tags”?
Læs tags via reflection Du øver dig i Go Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Go Academy?
Der kræves ingen tidligere erfaring. Go Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Parsing af brugerdefinerede tags”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Go Academy-lektion?
Ja. Alle Go Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Hvad er struct tags
- JSON-tags
- Valideringsbiblioteker
- Parsing af brugerdefinerede tags