![](/img/trans.png)
[英]Go Interface Method Returning Interface Doesn't Match Method Returning Concrete Type
[英]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.