Go 如何使用mapstructure标记作为json标记?

Go 如何使用mapstructure标记作为json标记?,go,tags,Go,Tags,我将介绍一个来自第三方的包,它具有这个带有mapstructure标记的struct 我希望此结构的实例是带有mapstructure指定值的json。我应该怎么做 我可以添加json标记,但在这样做时,我修改了包文件,我认为这是一种不好的方法 类型ServiceConfig struct{ //服务名称 名称字符串`mapstructure:Name` //端点定义集 端点字符串`mapstructure:端点` //污损超时 超时时间.Duration`mapstructure:超时` }

我将介绍一个来自第三方的包,它具有这个带有mapstructure标记的struct

我希望此结构的实例是带有mapstructure指定值的json。我应该怎么做

我可以添加json标记,但在这样做时,我修改了包文件,我认为这是一种不好的方法

类型ServiceConfig struct{ //服务名称 名称字符串`mapstructure:Name` //端点定义集 端点字符串`mapstructure:端点` //污损超时 超时时间.Duration`mapstructure:超时` } 我想得到:

{名称:sss,结束点:xxx,超时:120}
如果不想修改包文件,可以创建另一个具有相同字段名但带有JSON标记的结构,然后复制:

type JSONServiceConfig struct {
    Name      string        `json:"name"`
    Endpoints string        `json:"end_points"`
    Timeout   time.Duration `json:"timeout"`
}
然后:


如果不修改mapstructure源代码,就无法完成所需的操作,如果要指定选项,例如json的ompitempty,则可能会有点麻烦。但是,您可以简单地为此添加第二个struct标记

类型ServiceConfig struct{ //服务名称 名称字符串`mapstructure:Name json:Name` //端点定义集 端点字符串`mapstructure:end_points json:end_points` //污损超时 超时时间.Duration`mapstructure:Timeout json:Timeout` } 从reflect的文档中

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

x := JSONServiceConfig(serviceConfig)