我在尋找一個struct的字符串字段遍歷,所以我可以做一些清理/驗證(與strings.TrimSpace,strings.Trim等)?,F在我有一個雜亂的開關盒,它不是真正可擴展的,而且由于它不在我的應用程序(Web 表單)的熱點中,因此reflect在這里利用似乎是一個不錯的選擇。然而,我在如何實現這一點上遇到了一些障礙,反射文檔讓我有點困惑(我一直在研究其他一些驗證包,但它們太重量級了 + 我正在使用解組部分的大猩猩/模式已經):遍歷結構對于字符串類型的每個字段,從strings包中應用我需要的任何內容,即field = strings.TrimSpace(field)如果存在 field.Tag.Get("max"),我們將使用該值(strconv.Atoi,然后是 unicode.RuneCountInString)提供一個也與錯誤接口類型兼容的錯誤切片type FormError []string type Listing struct { Title string `max:"50"` Location string `max:"100"` Description string `max:"10000"` ExpiryDate time.Time RenderedDesc template.HTML Contact string `max:"255"` } // Iterate over our struct, fix whitespace/formatting where possible // and return errors encountered func (l *Listing) Validate() error { typ := l.Elem().Type() var invalid FormError for i = 0; i < typ.NumField(); i++ { // Iterate over fields // For StructFields of type string, field = strings.TrimSpace(field) // if field.Tag.Get("max") != "" { // check max length/convert to int/utf8.RuneCountInString if max length exceeded, invalid = append(invalid, "errormsg") } if len(invalid) > 0 { return invalid } return nil } func (f FormError) Error() string { var fullError string for _, v := range f { fullError =+ v + "\n" } return "Errors were encountered during form processing: " + fullError }
- 3 回答
- 0 關注
- 225 瀏覽
添加回答
舉報
0/150
提交
取消