为了账号安全,请及时绑定邮箱和手机立即绑定

迭代 Struct 中的字符串字段

迭代 Struct 中的字符串字段

Go
凤凰求蛊 2021-07-16 16:10:55
我在寻找一个struct的字符串字段遍历,所以我可以做一些清理/验证(与strings.TrimSpace,strings.Trim等)。现在我有一个杂乱的开关盒,它不是真正可扩展的,而且由于它不在我的应用程序(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 回答

  • 3 回答
  • 0 关注
  • 204 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信