Initial QSfera import
This commit is contained in:
+60
@@ -0,0 +1,60 @@
|
||||
package goutil
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/gookit/goutil/structs"
|
||||
"github.com/gookit/goutil/syncs"
|
||||
)
|
||||
|
||||
// ErrGroup is a collection of goroutines working on subtasks that
|
||||
// are part of the same overall task.
|
||||
type ErrGroup = syncs.ErrGroup
|
||||
|
||||
// NewCtxErrGroup instance. use for batch run tasks, can with context.
|
||||
//
|
||||
// Deprecated: use syncs.NewCtxErrGroup instead
|
||||
func NewCtxErrGroup(ctx context.Context, limit ...int) (*ErrGroup, context.Context) {
|
||||
return syncs.NewCtxErrGroup(ctx, limit...)
|
||||
}
|
||||
|
||||
// NewErrGroup instance. use for batch run tasks
|
||||
//
|
||||
// Deprecated: use syncs.NewErrGroup instead
|
||||
func NewErrGroup(limit ...int) *ErrGroup {
|
||||
return syncs.NewErrGroup(limit...)
|
||||
}
|
||||
|
||||
// RunFn func
|
||||
type RunFn func(ctx *structs.Data) error
|
||||
|
||||
// QuickRun struct
|
||||
type QuickRun struct {
|
||||
ctx *structs.Data
|
||||
// err error
|
||||
fns []RunFn
|
||||
}
|
||||
|
||||
// NewQuickRun instance
|
||||
func NewQuickRun() *QuickRun {
|
||||
return &QuickRun{
|
||||
ctx: structs.NewData(),
|
||||
}
|
||||
}
|
||||
|
||||
// Add func for run
|
||||
func (p *QuickRun) Add(fns ...RunFn) *QuickRun {
|
||||
p.fns = append(p.fns, fns...)
|
||||
return p
|
||||
}
|
||||
|
||||
// Run all func
|
||||
func (p *QuickRun) Run() error {
|
||||
for i, fn := range p.fns {
|
||||
p.ctx.Set("_index", i)
|
||||
if err := fn(p.ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user