面试题答案
一键面试- 错误捕获描述:
- 可以使用
sync.WaitGroup
来等待所有协程完成。 - 为每个协程传递一个
error
类型的chan
,用于发送协程执行过程中的错误。 - 在主协程中从这些
error
chan
中接收错误信息。
- 可以使用
- 代码示例:
package main
import (
"fmt"
"sync"
)
// 模拟API调用函数
func callAPI(apiNum int, errChan chan error, wg *sync.WaitGroup) {
defer wg.Done()
// 模拟API可能返回错误
if apiNum == 2 {
errChan <- fmt.Errorf("API %d returned an error", apiNum)
return
}
// 模拟成功
fmt.Printf("API %d call success\n", apiNum)
errChan <- nil
}
func main() {
var wg sync.WaitGroup
apiCount := 3
errChans := make([]chan error, apiCount)
for i := 0; i < apiCount; i++ {
errChans[i] = make(chan error)
wg.Add(1)
go callAPI(i + 1, errChans[i], &wg)
}
go func() {
wg.Wait()
for i := 0; i < apiCount; i++ {
close(errChans[i])
}
}()
for i := 0; i < apiCount; i++ {
if err := <-errChans[i]; err != nil {
fmt.Println(err)
}
}
}
上述代码启动了多个协程模拟调用API,每个协程将其执行过程中的错误发送到对应的 error
chan
中,主协程通过 sync.WaitGroup
等待所有协程完成后,从 chan
中接收错误信息并处理。