我知道有多种不同的解决方案可以完成我正在寻找的事情,但我正在寻找一种/正确的方法来并行执行一些请求。我是 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
}
并行执行给定示例中的请求的正确方法是什么?
斯蒂芬大帝
相关分类