您可以将多个(不同)标签设置为相同的值吗?

时间:2019-07-17 14:47:32

标签: string go struct go-structtag

对于我的某些项目,我不得不使用viper软件包来使用配置。 该软件包要求您添加mapstructure:"fieldname"来正确地识别和设置配置对象的字段,但是我还必须添加其他标签用于其他目的,从而导致如下所示:

type MyStruct struct {
    MyField string `mapstructure:"myField" json:"myField" yaml:"myField"`
}

如您所见,我为每个标签写tag:"myField"实在是多余的,所以我想知道是否有任何方法可以将它们“捆绑”起来并减少冗长程度,例如这个mapstructure,json,yaml:"myField"

还是根本不可能,您必须分别指定每个标签?

1 个答案:

答案 0 :(得分:4)

Struct tags是任意的string literals。存储在struct标记中的数据可能看起来像您想要的那样,但是如果您不遵循惯例,则必须编写自己的解析器/处理逻辑。如果遵循约定,则可以使用StructTag.Get()StructTag.Lookup()轻松获取标签值。

这些约定不支持“合并”多个标签,因此只需将它们全部写出即可。

惯例,引自reflect.StructTag

  

按照惯例,标记字符串是由可选的以空格分隔的键:“值”对的串联。每个键都是一个非空字符串,由空格(U + 0020''),引号(U + 0022'“')和冒号(U + 003A':')以外的非控制字符组成。每个值都用引号引起来。使用U + 0022'“'字符和Go字符串文字语法。

查看相关问题:What are the use(s) for tags in Go?