0

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

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

如您所见,为我tag:"myField"的每个标签编写代码对我来说是非常多余的,所以我想知道是否有任何方法可以将它们“捆绑”起来并减少冗长,就像这样mapstructure,json,yaml:"myField"

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

4

1 回答 1

4

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

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

约定,引自reflect.StructTag

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

请参阅相关问题:Go 中标签的用途是什么?

于 2019-07-17T15:00:23.183 回答