使用controller-runtime在go代码中重用方法

4szc88ey  于 2023-04-18  发布在  Go
关注(0)|答案(1)|浏览(115)

我需要Go中方法重用的帮助。
我的Kubernetes操作符中有两个函数签名(在不同的控制器中):

func myFunc(ctx context.Context, r *MyKindReconciler, myKind *myApiVersion.myKind) (ctrl.Result, error) {

func myFunc(ctx context.Context, r *MyOtherKindReconciler, myOtherKind *myApiVersion.myOtherKind) (ctrl.Result, error) {

函数myFunc的函数体在两种情况下是相同的,只是传入的变量类型不同。两个kinds都有相同的可用方法。
为了防止重复,如果可能的话,我想把这个方法移到一个助手程序中。你知道如何实现吗?

a8jjtwal

a8jjtwal1#

让它工作。
以下是我创建的interace:

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

可能的方法签名如下所示:

func myFunc(ctx context.Context, client client.Client, object MyObject){}

只有下行.DeepCopy()将不可用,因为它返回一个特定的类型,并且不能在Interface中重载。

相关问题