package pool import ( "runtime" "golang.org/x/sync/errgroup" ) func Run[T any](items []T, fn func(T) error) error { if len(items) == 0 { return nil } g := &errgroup.Group{} g.SetLimit(runtime.NumCPU()) for _, item := range items { g.Go(func() error { return fn(item) }) } return g.Wait() }