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



我有一个第三方客户端库(Sarama(公开了一个配置结构。

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

type MyConfig struct {
Sarama sarama.Config
}

我正在使用 go-yaml 来封送我的配置。编组MyConfiggo-yaml 恐慌,sarama.Config因为它包含func类型的字段 (Partitioner(,并且 yaml 解析器不知道如何Marshalfunc

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

有没有一种优雅的go方法可以将此配置包含在我自己的配置中,而不会引起go-yaml编组器恐慌?我应该尝试覆盖标签还是应该将结构复制到我自己的代码中并编写转换器?

我一直对go-yaml有问题。该库的设计并不好。然而,它是手头最有效的工具,至少目前是这样。

有一些方法可以躲避encoding/json但我测试了它对go-yaml不起作用.但是,go-yaml确实提供了一种扩展其容量的方法(尽管它非常尴尬(。

正如我在您的代码中看到的那样,该Partitioner属于PartitionerConstructor类型,一种自定义类型,因此您可以在接口yaml.MarshalerPartitionerConstructor嵌入:

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

请注意,它将生成一条Partitioner: null线,但它会从恐慌中绕过。

最新更新