GitHub - kamildrazkiewicz/go-flow: Simply way to control goroutines execution order based on dependencies (original) (raw)
Goflow
Goflow is a simply package to control goroutines execution order based on dependencies. It works similar to async.auto from node.js async package, but for Go.
Install
Install the package with:
go get github.com/kamildrazkiewicz/go-flow
Import it with:
import "github.com/kamildrazkiewicz/go-flow"
and use goflow as the package name inside the code.
Example
package main
import ( "fmt" "github.com/kamildrazkiewicz/go-flow" "time" )
func main() { f1 := func(r map[string]interface{}) (interface{}, error) { fmt.Println("function1 started") time.Sleep(time.Millisecond * 1000) return 1, nil }
f2 := func(r map[string]interface{}) (interface{}, error) {
time.Sleep(time.Millisecond * 1000)
fmt.Println("function2 started", r["f1"])
return "some results", nil
}
f3 := func(r map[string]interface{}) (interface{}, error) {
fmt.Println("function3 started", r["f1"])
return nil, nil
}
f4 := func(r map[string]interface{}) (interface{}, error) {
fmt.Println("function4 started", r)
return nil, nil
}
res, err := goflow.New().
Add("f1", nil, f1).
Add("f2", []string{"f1"}, f2).
Add("f3", []string{"f1"}, f3).
Add("f4", []string{"f2", "f3"}, f4).
Do()
fmt.Println(res, err)}
Output will be:
function1 started
function3 started 1
function2 started 1
function4 started map[f2:some results f3:<nil>]
map[f1:1 f2:some results f3:<nil> f4:<nil>] <nil>
