Popularity
5.0
Growing
Activity
0.0
Stable
142
9
15

Description

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.

Programming language: Go
Latest version: v1.0

Goflow alternatives and similar packages

Based on the "Goroutines" category

Do you think we are missing an alternative of Goflow or a related project?

Add another 'Goroutines' Package

README

Goflow

GoDoc License Release GoReport Travis Coverage

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>


*Note that all licence references and agreements mentioned in the Goflow README section above are relevant to that project's source code only.