【发布时间】:2021-11-02 23:25:00
【问题描述】:
我正在创建一个函数来编组各种 go-client 资源:*v1.Namespace、*v1.Pod 等。
想法是让他们实现一个自定义接口并创建一个函数,其中参数的类型将是我声明的接口:
package kubernetes
import (
"gopkg.in/yaml.v2"
v1 "k8s.io/api/core/v1"
)
type Marshalable interface {
Marshal()
}
func (obj *v1.Namespace) Marshal() {
}
func (obj *v1.Pod) Marshal() {
}
func marshal(obj Marshalable) string {
y, err := yaml.Marshal(obj)
if err != nil {
panic(err)
}
return string(y)
}
Marshal() 只是一个空函数,以便类型能够实现接口。但是当然,由于 go-client 资源来自外部包,我不能这样做。有什么建议吗?
【问题讨论】:
-
你在这里做什么编组? JSON?二进制?
-
我正在做 JSON 编组。
-
我无法理解您为什么将问题颠倒过来。 Marshal 接受 any 类型并产生 bytes/strings。不需要对类型进行编组来实现编组功能,除非某些极端情况应尽可能保持偶发性。
-
这个想法是从其他检索 Kubernetes 对象的地方调用
marshal(obj Marshalable)函数。我只想拥有一个带有错误处理等功能的marshal(obj Marshable)函数,并且可以从多个地方调用它。方法Marshal()只是一个空方法,用于实现Marshable接口。可能是方法的名字混淆了yaml.Marshal(obj),抱歉。
标签: go generics types interface