Golang 如何处理WaitGroups的错误

Golang 如何处理WaitGroups的错误

在运行多个 goroutine 时,我们有可能得到一些 panic 。 为了处理这种情况,我们可以使用 通道Waitgroups 的组合来成功处理错误,而不是退出进程。

我们假设有一个函数,当被调用时返回一个 panic ,这将自动杀死程序的执行,因为当 panic 被调用时,它在内部调用 os.Exit() 函数。我们要确保这个恐慌不会关闭程序,为此,我们将创建一个通道来存储错误,然后我们就可以在 选择 语句的帮助下使用这个通道来打印错误。

下面显示的代码的主要思想是–

  • 创建两个通道,一个用来存放错误,另一个用来表示 WaitGroup。

  • 一个 goroutine ,用来等待WaitGroup完成,也用来在完成后关闭通道。

  • select 语句用于监听错误或 WaitGroup 的完成。

例子

考虑一下下面的代码。

package main
import (
   "errors"
   "log"
   "sync"
)
func main() {
   fatalErrorChannel := make(chan error)
   wgDone := make(chan bool)
   var wg sync.WaitGroup
   wg.Add(2)
   go func() {
      log.Println("First WaitGroup")
      wg.Done()
   }()
   go func() {
      log.Println("Second WaitGroup")
      err := returningError()
      if err != nil {
         fatalErrorChannel <- err
      }
      wg.Done()
   }()
   go func() {
      wg.Wait()
      close(wgDone)
   }()
   select {
      case <-wgDone:
         break
      case err := <-fatalErrorChannel:
         close(fatalErrorChannel)
         log.Fatal("Error encountered: ", err)
   }
   log.Println("Program worked!")
}
func returningError() error {
   return errors.New("Error on panic.com")
}
Go

输出

当我们运行这段代码时,它将产生以下输出 —

2022/02/21 09:15:43 Second WaitGroup
2022/02/21 09:15:43 Error encountered: Error on panic.com
exit status 1
Go

应该注意的是,你的机器的输出可能有所不同,但可以肯定的是,你会遇到这个错误信息。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册