我有一个第三方客户端库(Sarama(公开了一个配置结构。
我想直接从我的配置结构引用该结构:
type MyConfig struct {
Sarama sarama.Config
}
我正在使用 go-yaml 来封送我的配置。编组MyConfig
go-yaml 恐慌,sarama.Config
因为它包含func
类型的字段 (Partitioner
(,并且 yaml 解析器不知道如何Marshal
func
。
防止这种恐慌的一种方法是告诉 go-yaml 忽略此字段(使用字段上的标记yaml:"-"
(,但我无法在我的代码中未定义的结构上设置标记。
有没有一种优雅的go方法可以将此配置包含在我自己的配置中,而不会引起go-yaml编组器恐慌?我应该尝试覆盖标签还是应该将结构复制到我自己的代码中并编写转换器?
我一直对go-yaml
有问题。该库的设计并不好。然而,它是手头最有效的工具,至少目前是这样。
有一些方法可以躲避encoding/json
但我测试了它对go-yaml
不起作用.但是,go-yaml
确实提供了一种扩展其容量的方法(尽管它非常尴尬(。
正如我在您的代码中看到的那样,该Partitioner
属于PartitionerConstructor
类型,一种自定义类型,因此您可以在接口yaml.Marshaler
PartitionerConstructor
嵌入:
func (PartitionerConstructor) MarshalYAML() (interface{},error) {
return nil,nil
}
请注意,它将生成一条Partitioner: null
线,但它会从恐慌中绕过。