登录
首页 >  Golang >  Go问答

如何在golang中分割长结构标签?

来源:stackoverflow

时间:2024-04-14 14:57:34 286浏览 收藏

“纵有疾风来,人生不言弃”,这句话送给正在学习Golang的朋友们,也希望在阅读本文《如何在golang中分割长结构标签?》后,能够真的帮助到大家。我也会在后续的文章中,陆续更新Golang相关的技术文章,有好的建议欢迎大家在评论留言,非常感谢!

问题内容

假设我有以下结构,其中 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"`
}

添加一些验证器后,线路太长并且不可维护。

我想拆分成新行,但 go 不支持,并且与 reflect.structtag.get 不兼容。

但是,根据我的测试,验证器可以使用多行结构标记,但 vet 失败。

简而言之,分割长结构标签的正确方法是什么?


解决方案


正如您所指出的,StructTag.Get() 期望的约定不允许在结构标记中使用换行符(如果您不遵循约定,StructTag.Get() 将不会好好工作)。在我看来,太多的东西被压缩到一个标签值中。

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

如果您别无选择,并且确实需要将这么多信息放入单个标记中,那么您必须选择使用现成的 StructTag.Get() 方法的便利性,还是忽略约定,使用任何格式您想要在结构标签中,并简单地实现您自己的标签解析逻辑。

文中关于的知识介绍,希望对你的学习有所帮助!若是受益匪浅,那就动动鼠标收藏这篇《如何在golang中分割长结构标签?》文章吧,也可关注golang学习网公众号了解相关技术文章。

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>