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解析器不知道如何
编组
a
func

防止这种恐慌的一种方法是告诉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()
。但这确实存在与上面相同的问题,因为我无法在另一个包中定义的结构上定义方法。