簡體   English   中英

將go接口對象轉換/類型轉換為具體類型

[英]Converting/typecasting go interface object to concrete type

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())
    }
}

我可以使用此代碼讀取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())
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM