将go接口对象转换/类型转换为具体类型

时间:2019-08-12 04:48:40

标签: go kubernetes google-kubernetes-engine

informer的实现中,可以提供如下的事件处理程序。

podInformer.AddEventHandler(cache.ResourceEventHandlerFuncs {
   // When a new pod gets created
   AddFunc: func(obj interface{}) {
       k8s.handleAddPod(obj)
   },
   // When a pod gets updated
   UpdateFunc: func(oldObj interface{}, newObj interface{}) {
       k8s.handleUpdatePod(oldObj, newObj)
   },
   // When a pod gets deleted
   DeleteFunc: func(obj interface{}) {
       k8s.handleDeletePod(obj)
   },
})

这是一个示例事件处理程序,用于处理与Pod相关的事件。到目前为止,我已经将处理程序编写如下:但是,它无法读取对象。

我无法将obj interface{}转换成v1.Pod,并且尝试读取它失败。标志ok的值来自false。有人可以建议这段代码中缺少什么吗?

func (k8s *K8S) handleAddPod(obj interface{}) {
    pod, ok := obj.(v1.Pod)
    if ok {
        log.Debug("Status: " + string(pod.Status.Phase))
        log.Debug("Pod added: " + pod.Name + " " + pod.DeletionTimestamp.String())
    }
}

1 个答案:

答案 0 :(得分:0)

我可以使用此代码读取obj的值和内容。

func (k8s *K8S) handleAddPod(obj interface{}) {
    pod, ok := obj.(*v1.Pod)   // Added * here.  
    if ok {
        log.Debug("Status: " + string(pod.Status.Phase))
        log.Debug("Pod added: " + pod.Name + " " + pod.DeletionTimestamp.String())
    }
}
相关问题