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