对于我的某些项目,我不得不使用viper软件包来使用配置。
该软件包要求您添加mapstructure:"fieldname"
来正确地识别和设置配置对象的字段,但是我还必须添加其他标签用于其他目的,从而导致如下所示:
type MyStruct struct {
MyField string `mapstructure:"myField" json:"myField" yaml:"myField"`
}
如您所见,我为每个标签写tag:"myField"
实在是多余的,所以我想知道是否有任何方法可以将它们“捆绑”起来并减少冗长程度,例如这个mapstructure,json,yaml:"myField"
还是根本不可能,您必须分别指定每个标签?
答案 0 :(得分:4)
Struct tags是任意的string literals。存储在struct标记中的数据可能看起来像您想要的那样,但是如果您不遵循惯例,则必须编写自己的解析器/处理逻辑。如果遵循约定,则可以使用StructTag.Get()
和StructTag.Lookup()
轻松获取标签值。
这些约定不支持“合并”多个标签,因此只需将它们全部写出即可。
惯例,引自reflect.StructTag
:
按照惯例,标记字符串是由可选的以空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由空格(U + 0020''),引号(U + 0022'“')和冒号(U + 003A':')以外的非控制字符组成。每个值都用引号引起来。使用U + 0022'“'字符和Go字符串文字语法。