覆盖导入的结构上的struct字段标记

时间:2018-06-18 16:08:35

标签: go

我有一个公开Sarama的第三方客户端库(a configuration struct)。

我想直接从我的配置结构中引用该结构:

type MyConfig struct {
  Sarama sarama.Config
}

我正在使用go-yaml来整理我的配置。由于MyConfig包含sarama.Config类型的字段(Partitioner)并且yaml解析器不知道如何func,因此使用go-yaml恐慌来编组Marshal 1}} func

防止这种恐慌的一种方法是告诉go-yaml忽略这个字段(使用字段上的标记yaml:"-")但是我无法在未定义的结构上设置标记在我的代码中。

是否有一种优雅的方式将此配置包含在我自己的配置中并且不会导致go-yaml marshaller恐慌?我应该尝试覆盖标签还是应该将结构复制到我自己的代码中并编写转换器?

1 个答案:

答案 0 :(得分:1)

我一直遇到go-yaml的问题。图书馆的设计不是很好。然而,它是最有效的工具,至少目前是这样。

有一些方法可以隐藏encoding/json,但我测试它不适用于go-yaml。但是,go-yaml确实提供了扩展其容量的方法(尽管它非常笨拙)。

正如我在您的代码中看到的,Partitioner类型为PartitionerConstructor,是一种自定义类型,因此您可以PartitionerConstructor实现yaml.Marshaler接口:

func (PartitionerConstructor) MarshalYAML() (interface{},error) {
        return nil,nil
}

请注意,它会生成Partitioner: null行,但它会从恐慌中解决。