golang的errgroup简单用法介绍

errgroup是Go语言标准库golang.org/x/sync/errgroup中的一个包,用于管理一组goroutine的错误。它提供了一种优雅的方式来并发执行多个任务,并在其中任何一个任务返回错误时取消所有任务的执行。

errgroup类型通过errgroup.Group结构体表示,其中包含一个Wait方法和一个Go方法。

Wait方法用于等待所有goroutine完成并返回首个遇到的错误。如果没有错误发生,Wait方法将返回nil;如果有错误发生,它将返回首个遇到的错误。

Go方法用于启动一个新的goroutine,并将其添加到errgroup中。它接受一个函数参数作为goroutine的主体,并返回一个error类型的结果。如果该函数返回非nil的错误,则该错误将被视为整个errgroup的错误。

下面是一个简单示例,演示了如何使用errgroup来并发执行多个任务:

package main

import (
	"context"
	"fmt"
	"golang.org/x/sync/errgroup"
	"net/http"
)

func main() {
	g := new(errgroup.Group)

	// 启动第一个任务
	g.Go(func() error {
		resp, err := http.Get("https://www.example.com")
		if err != nil {
			return err
		}
		defer resp.Body.Close()

		// 执行任务逻辑...

		return nil
	})

	// 启动第二个任务
	g.Go(func() error {
		resp, err := http.Get("https://www.google.com")
		if err != nil {
			return err
		}
		defer resp.Body.Close()

		// 执行任务逻辑...

		return nil
	})

	// 等待所有任务完成
	if err := g.Wait(); err != nil {
		fmt.Println("At least one task failed:", err)
	} else {
		fmt.Println("All tasks completed successfully")
	}
}

在上面的示例中,我们创建了一个errgroup.Group实例,并使用Go方法启动了两个任务。然后,我们调用Wait方法等待所有任务完成。如果任何一个任务返回错误,Wait方法将返回该错误。

使用errgroup可以简化并发任务管理和错误处理的过程,使代码更加清晰和可读。请注意,errgroup并不会自动取消还在运行的任务,而是在首个错误出现时停止继续执行其他任务。因此,在使用errgroup时,需要确保每个任务都能够正确处理上下文的取消信号,以便及时终止任务的执行。

此条目发表在golang, 技术分类目录。将固定链接加入收藏夹。
0 0 投票数
文章评分
订阅评论
提醒
guest
0 评论
最旧
最新 最多投票