String-Felder in Strukturen mithilfe von Reflection iterieren
Bei der Arbeit mit komplexen Strukturen, die String-Felder enthalten, ist es oft notwendig, diese Felder zu bereinigen oder zu validieren . Während die manuelle Iteration nicht mehr skalierbar sein kann, bietet die Verwendung von Reflektion eine flexible Lösung.
Felditeration implementieren
Um mithilfe von Reflektion über die Felder in einer Struktur zu iterieren, führen Sie die folgenden Schritte aus:
Fehlerbehandlung und Validierung
In Ihrem speziellen Fall möchten Sie Felder validieren und auf maximale Längen prüfen, die durch Feld-Tags angegeben werden:
Beispielcode
Hier ist eine Beispielimplementierung:
<code class="go">package main import ( "fmt" "reflect" "strings" ) type MyStruct struct { A, B, C string I int D string J int } func main() { ms := MyStruct{"Green ", " Eggs", " and ", 2, " Ham ", 15} msValuePtr := reflect.ValueOf(&ms) msValue := msValuePtr.Elem() var invalid []string for i := 0; i < msValue.NumField(); i++ { field := msValue.Field(i) if field.Type() != reflect.TypeOf("") { continue } str := field.Interface().(string) str = strings.TrimSpace(str) field.SetString(str) maxTag := field.Tag.Get("max") if maxTag != "" { maxLength, _ := strconv.Atoi(maxTag) runeCount := unicode.RuneCountInString(str) if runeCount > maxLength { invalid = append(invalid, "Field exceeded max length") } } } if len(invalid) > 0 { fmt.Println("Validation errors:") for _, err := range invalid { fmt.Println(err) } } else { fmt.Println("Validation successful") } }</code>
Dieser Code zeigt, wie man String-Felder bereinigt und Längen basierend auf Feld-Tags validiert.
Das obige ist der detaillierte Inhalt vonWie kann ich String-Felder in Strukturen mithilfe von Reflection in Go bereinigen und validieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!