Я знаю, что есть несколько различных решений для того, что я ищу, но я ищу / правильный способ выполнять некоторые запросы параллельно.Я новичок в Go, но мне кажется, что я сейчас громоздок.
Вариант использования:
Мне нужно запросить 4 разные конечные точки REST (запросы клиента kubernetes)) в параллели.После того, как я получил все эти 4 результата, мне нужно выполнить некоторую обработку.
Моя проблема:
Я знаю, что для этого нужно использовать процедуры go, но что лучшеспособ собрать результаты.То, что я делаю в данный момент (см. Пример кода ниже), вероятно, очень громоздко, но я не уверен, что еще я мог бы сделать, чтобы улучшить код.
Код:
Этот код проще всего понять, но я не хочу выполнять запросы последовательно:
// Get node resource usage metrics
nodeMetricsList, err := c.kubernetesClient.NodeMetricses()
if err != nil {
log.Warn("Failed to get node usage list from Kubernetes", err)
return err
}
// Get pod resource usage metrics
podMetricsList, err := c.kubernetesClient.PodMetricses()
if err != nil {
log.Warn("Failed to get pod usage list from Kubernetes", err)
return err
}
Так я бы выполнял запросы параллельно.Это делает код намного менее читабельным, и его реализация слишком громоздка:
var nodeMetricsList *v1beta1.NodeMetricsList
var nodeMetricsListError error
var podMetricsList *v1beta1.PodMetricsList
var podMetricsListError error
go func() {
nodeMetricsList, nodeMetricsListError = c.kubernetesClient.NodeMetricses()
}()
if nodeMetricsListError != nil {
log.Warn("Failed to get podList from Kubernetes", err)
return err
}
// Get pod resource usage metrics
go func() {
podMetricsList, podMetricsListError = c.kubernetesClient.PodMetricses()
}()
if podMetricsListError != nil {
log.Warn("Failed to get pod usage list from Kubernetes", err)
return err
}
Как правильно выполнять запросы в моем примере параллельно?