代码之家  ›  专栏  ›  技术社区  ›  Dagang Wei

如何转换运行时。对象到特定类型?

  •  0
  • Dagang Wei  · 技术社区  · 6 年前

    我正在用Kubebuilder框架编写一个自定义控制器,在一种方法中,我得到了一个类型为 runtime.Object ,我知道我应该能够将其转换为特定类型,比如 MyCustomResource

    0 回复  |  直到 6 年前
        1
  •  4
  •   erstaples    6 年前

    这应该很简单:

    func convertToMyCustomResource(obj runtime.Object) *v1alpha1.MyCustomResource {
      myobj := obj.(*v1alpha1.MyCustomResource)
      return myobj
    }
    

    如果这会产生错误(例如不可能的类型断言),请确保 MyCustomResource runtime.Object 界面即

    1. DeepCopyObject 方法

      go run vendor/sigs.k8s.io/controller-tools/cmd/controller-gen/main.go paths=./api/... object
      
    2. 添加 "k8s.io/apimachinery/pkg/apis/meta/v1".TypeMeta 现场 我的客户资源 struct,它实现 GetObjectKind 方法

        import (
          metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        )
    
        type MyCustomResource struct {
          metav1.TypeMeta `json:",inline"`
          // ... other stuff
        }
    
    推荐文章