Go 在导入的结构上重写结构字段标记
我有一个第三方客户机库()公开 我想直接从配置结构引用该结构:Go 在导入的结构上重写结构字段标记,go,Go,我有一个第三方客户机库()公开 我想直接从配置结构引用该结构: type MyConfig struct { Sarama sarama.Config } 我正在使用封送来封送我的配置。使用go yaml panics编组MyConfig,因为sarama.Config包含一个类型为func的字段(Partitioner),yaml解析器不知道如何编组afunc 防止这种恐慌的一种方法是告诉go yaml忽略此字段(使用字段上的标记yaml:“-”),但我无法在代码中未定义的结构上设置标记
type MyConfig struct {
Sarama sarama.Config
}
我正在使用封送来封送我的配置。使用go yaml panics编组MyConfig
,因为sarama.Config
包含一个类型为func
的字段(Partitioner
),yaml解析器不知道如何编组afunc
防止这种恐慌的一种方法是告诉go yaml忽略此字段(使用字段上的标记yaml:“-”
),但我无法在代码中未定义的结构上设置标记
是否有一种优雅的方式将此配置包括在我自己的配置中,而不会导致go yaml marshaller恐慌?我应该尝试重写标记,还是应该将结构复制到自己的代码中并编写转换器 我一直在使用go-yaml
时遇到问题。这个图书馆设计得不好。然而,至少就目前而言,它是手头上最有效的工具
有一些方法可以隐藏编码/json
,但我测试了它对go yaml
不起作用。然而,go-yaml
确实提供了一种扩展其容量的方法(尽管它非常笨拙)
正如我在您的代码中看到的,Partitioner
属于PartitionerConstructor
类型,是一种自定义类型,因此您可以使PartitionerConstructor
实现yaml.Marshaler
接口:
func (PartitionerConstructor) MarshalYAML() (interface{},error) {
return nil,nil
}
请注意,它将生成一个Partitioner:null
行,但它将避免恐慌。您无法覆盖您已经指出的标记,因此我不确定您在这里实际询问的是什么。很高兴知道。我不知道marshallyaml()
。但这确实存在与上面相同的问题,因为我无法在另一个包中定义的结构上定义方法。