consider this function :
func doAllWork() error {
var wg sync.WaitGroup
for i := 0; i < 2; i++ {
wg.add(1)
go func() {
defer wg.Done()
for j := 0; j < 10; j++ {
result, err := work(j)
if err != nil {
// can't use `return err` here
// what sould I put instead ?
os.Exit(0)
}
}
}()
}
wg.Wait()
return nil
}
In each goroutine, the function work()
is called 10 times. If one call to work()
returns an error in any of the running goroutines, I want all the goroutines to stop immediately, and the program to exit.
Is it ok to use os.Exit()
here ? How should I handle this ?
Edit: this question is different from how to stop a goroutine as here I need to close all goroutines if an error occurs in one
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…