使用反射迭代結構中的字串欄位
使用包含字串欄位的複雜結構時,通常需要清理或驗證這些字段。雖然手動迭代可能變得不可擴展,但使用反射提供了一種靈活的解決方案。
實現字段迭代
要使用反射迭代結構體中的字段,請按照以下步驟操作:
處理錯誤和驗證
在您的具體情況下,您希望驗證欄位並檢查欄位標籤指定的最大長度:
範例程式碼
這是一個範例實作:
<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>
此程式碼示範如何清除字串欄位並根據欄位標籤驗證長度。
以上是如何在 Go 中使用反射清理和驗證結構中的字串欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!