面试题答案
一键面试在Go语言中,可以使用sync.WaitGroup
和error
切片来收集所有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)
}
}
}
在上述代码中:
sync.WaitGroup
用于等待所有goroutine完成。- 创建一个
errors
切片,长度与goroutine数量相同,用于存储每个goroutine返回的错误。 - 在每个goroutine中调用
ioOperation
模拟I/O操作,并将返回的错误存储在errors
切片的相应位置。 - 使用
wg.Wait()
等待所有goroutine完成。 - 最后遍历
errors
切片,统一处理所有错误。