1 回答

TA貢獻1878條經驗 獲得超4個贊
雖然調用幾乎相同,內容也幾乎相同,但它們的類型不同。 CoreV1().Pods(namespace).List
是 :
List(ctx context.Context, opts metav1.ListOptions) (*v1.PodList, error)
但是CoreV1().Services(namespace).List
是
List(ctx context.Context, opts metav1.ListOptions) (*v1.ServiceList, error)
一個返回 a *v1.PodList
,另一個返回 a *v1.ServiceList
。這兩個不同的對象都有Items
,但一個是 a []*Service
,另一個是 a []*Pod
。
我個人會考慮不包裝。我會改為調用底層函數,CoreV1
在兩種情況下都使用相同的客戶端。我當然不會嘗試將它們組合成一個功能。
如果這里有什么要組合的,那就是命名空間和名稱:
type ByName struct {
Name string
Namespace string
v1 corev1.CoreV1Interface
}
func (b *ByName)Services(ctx context.Context) []v1.Service , error {
return b.v1.Services(namespace).List(ctx, getListOption(b.Name))
}
func (b *ByName)Pods(ctx context.Context) []v1.Pod, error {
return b.v1.Pods(b.Namespace).List(ctx, getListOption(b.Name))
}
現在您不必傳遞名稱和命名空間:
b := &ByName{
Name: name,
Namespace: namespace,
v1: clientset.CoreV1(),
}
if svcs, err := b.Services(); err != nil {
return nil, err
} else if pods, err := b.Pods(); err != nil {
return nil, err
} else {
... continue processing
}
而且您無需進行大量類型檢查即可獲得所需的簡潔性。
- 1 回答
- 0 關注
- 128 瀏覽
添加回答
舉報