抱歉,我对 Go 很陌生,所以希望这不是一个愚蠢的问题。我知道一般意义上的指针,但在 Go 语义上苦苦挣扎。
我无法让它工作:
func DeleteOldCronJob(c client.Client, ctx context.Context, namespace string, name string) error {
cronJob := batchv1beta1.CronJob{}
key := client.ObjectKey{
Namespace: namespace,
Name: name,
}
return DeleteOldAny(c, ctx, name, key, &cronJob)
}
func DeleteOldAny(c client.Client, ctx context.Context, name string, key client.ObjectKey, resource interface{}) error {
err := c.Get(ctx, key, resource)
if err == nil {
err := c.Delete(ctx, resource)
if err != nil {
return err
}
} else {
return err
}
return nil
}
我得到一个错误:
interface {} does not implement "k8s.io/apimachinery/pkg/runtime".Object (missing DeepCopyObject method)
关键是我可以在多种不同类型上重用 DeleteOldAny,使我的代码库更紧凑(我可以只复制+粘贴 DeleteOldCronjob 并更改类型)。据我所知,Go 中指向接口的指针通常是错误的。另外,我导入的 k8s 类型只是一个结构。所以,我想既然它是一个结构而不是一个接口,我应该像这样传递资源 aa 指针:
err := c.Get(ctx, key, &resource)
但这给了我另一个错误:
*interface {} is pointer to interface, not interface
所以我有点卡住了。我是注定要为每种类型复制+粘贴相同的函数,还是我犯了一个简单的语法错误?
幕布斯7119047
暮色呼如
相关分类