如何使用runtime.Object在go

时间:2018-08-05 13:09:52

标签: go kubernetes client-go

我正在编写一个Kubernetes控制器,其中需要在不同种类的资源上运行一个函数,包括我的自定义资源和其他种类的资源(此函数仅对资源名称感兴趣)。

我的理解是,使用runtime.Object可以做到这一点,但我无法使其正常工作。
这是函数签名:

func myFunc(foo []runtime.Object) []runtime.Object

在调用函数时,我传递了一个类型化的对象,并希望将其分配给runtime.Object

foo := []v1alpha1.MyCRD{}
bar := myFunc(foo)

我遇到编译器错误:

cannot use foo (type []v1alpha1.MyCRD) as []runtime.Object in argument to myFunc

查看runtime.Object的定义:

type Object interface {
  GetObjectKind() schema.ObjectKind
  DeepCopyObject() Object
}

MyCRD类型正在嵌入metav1.TypeMeta,因此它具有必需的GetObjectKind()函数。

它也带有注释:

// +k8s:deepcopy-gen:interfaces=k8s.io/apimachinery/pkg/runtime.Object

因此它还具有必需的DeepCopyObject()(在生成的文件中可见)。

我已经为此苦苦挣扎了一段时间,我认为这可能与在scheme中注册类型有关,但是我不确定它是如何工作的,并且找不到关于它的任何文档。 。我尝试从发现的其他项目中复制类型注册代码,但并没有真正了解它的功能(如我所说,无法找到有关此文档的文档)。仍然无法正常工作。


相关:

0 个答案:

没有答案