package sync2 import "sync" func ParallelDo[T any](args []T, fn func(val T, index int) error) error { var err error var wg sync.WaitGroup wg.Add(len(args)) for i, arg := range args { go func(arg T, index int) { defer wg.Done() if e := fn(arg, index); e != nil { err = e } }(arg, i) } wg.Wait() return err }