假设我有以下结构,其中valid
用于通过每个验证者(特别是govalidator)的自定义消息验证结构。
type Login struct {
Email string `json:"email" valid:"required~Email is required,email~The email address provided is not valid"`
Password string `json:"password" valid:"required~Password is required,stringlength(6|40)~Password length must be between 6 and 40"`
}
添加一些验证器后,行太长且无法维护。
我想换成新行,但not supported by go,并且与reflect.StructTag.Get不兼容。
但是,根据我的测试,验证器可与多行struct标签一起使用,但vet失败。
简短,分割长struct标签的正确方法是什么?
答案 0 :(得分:2)
如您所述,StructTag.Get()
期望的惯例不允许在struct标记中使用换行符(如果您不遵循约定,StructTag.Get()
将无法正常工作)。我认为将太多内容压缩到单个标签值中。
如果要存储有关结构的大量元信息,我会将其存储在struct标记之外,并由其他结构正确建模,以便可以以类型安全的方式对其进行访问/处理。
如果您别无选择,并且确实需要将大量信息放入单个标签中,那么您就必须在使用便捷的StructTag.Get()
方法的便利性之间进行选择,或者省略约定,使用任何格式想要在struct标记中,并简单地实现自己的标记解析逻辑。