如何在golang中拆分长struct标签?

时间:2018-08-23 11:07:34

标签: string go struct

假设我有以下结构,其中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标签的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

如您所述,StructTag.Get()期望的惯例不允许在struct标记中使用换行符(如果您不遵循约定,StructTag.Get()将无法正常工作)。我认为将太多内容压缩到单个标签值中。

如果要存储有关结构的大量元信息,我会将其存储在struct标记之外,并由其他结构正确建模,以便可以以类型安全的方式对其进行访问/处理。

如果您别无选择,并且确实需要将大量信息放入单个标签中,那么您就必须在使用便捷的StructTag.Get()方法的便利性之间进行选择,或者省略约定,使用任何格式想要在struct标记中,并简单地实现自己的标记解析逻辑。