LINUX.ORG.RU

История изменений

Исправление alnkapa, (текущая версия) :

wg := sync.WaitGroup{}
errCh := make(chan error, 10) 
for i := 0; i < 10; i++ {
	wg.Add(1)
	go func() {
		defer wg.Done()
                if err = fu(i); err != nil {
                   errCh <- err
                }
	}()
}
var err error
wg.Wait()
close(errCh)

for err1 := range errCh {
	err = errors.Join(err, err1)
}
fmt.Println(err)

Совсем недавно использовал такую конструкцию, как это сделать с try…catch или еще как то, не представляю.

Исправление alnkapa, :

wg := sync.WaitGroup{}
errCh := make(chan error, 10) 
for i := 0; i < 10; i++ {
	wg.Add(1)
	go func() {
		defer wg.Done()
                if err = fu(i); err != nil {
                   errCh <= err
                }
	}()
}
var err error
wg.Wait()
close(errCh)

for err1 := range errCh {
	err = errors.Join(err, err1)
}
fmt.Println(err)

Совсем недавно использовал такую конструкцию, как это сделать с try…catch или еще как то, не представляю.

Исходная версия alnkapa, :

wg := sync.WaitGroup{}
errCh := make(chan error, 10) 
for i := 0; i < 10; i++ {
	wg.Add(1)
	go func() {
		defer wg.Done()
		if i%2 == 0 {
			errCh <- errors.New("error" + strconv.Itoa(i))
		}
	}()
}
var err error
wg.Wait()
close(errCh)

for err1 := range errCh {
	err = errors.Join(err, err1)
}
fmt.Println(err)

Совсем недавно использовал такую конструкцию, как это сделать с try…catch или еще как то, не представляю.