MST

星途 面试题库

面试题:Go中并发环境下错误处理的基础应用

在Go的并发编程中,假设你有多个goroutine并发执行一些I/O操作,每个goroutine都可能返回错误。请描述如何收集所有goroutine的错误并统一处理,写出主要的代码结构。
23.3万 热度难度
编程语言Go

知识考点

AI 面试

面试题答案

一键面试

在Go语言中,可以使用sync.WaitGrouperror切片来收集所有goroutine的错误并统一处理。以下是主要的代码结构:

package main

import (
    "fmt"
    "sync"
)

func ioOperation(i int) error {
    // 模拟I/O操作,这里返回一些错误示例
    if i%2 == 0 {
        return fmt.Errorf("error in goroutine %d", i)
    }
    return nil
}

func main() {
    var wg sync.WaitGroup
    numGoroutines := 5
    errors := make([]error, numGoroutines)

    for i := 0; i < numGoroutines; i++ {
        wg.Add(1)
        go func(index int) {
            defer wg.Done()
            err := ioOperation(index)
            if err != nil {
                errors[index] = err
            }
        }(i)
    }

    wg.Wait()

    // 统一处理错误
    for _, err := range errors {
        if err != nil {
            fmt.Println(err)
        }
    }
}

在上述代码中:

  1. sync.WaitGroup用于等待所有goroutine完成。
  2. 创建一个errors切片,长度与goroutine数量相同,用于存储每个goroutine返回的错误。
  3. 在每个goroutine中调用ioOperation模拟I/O操作,并将返回的错误存储在errors切片的相应位置。
  4. 使用wg.Wait()等待所有goroutine完成。
  5. 最后遍历errors切片,统一处理所有错误。