Goroutine unit manager
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Chakib Benziane c177a76c4d udpate doc 3 years ago
README.md udpate doc 3 years ago
manager.go initial 3 years ago



Go Unit Manager is a simple Goroutine unit manager for GoLang.


  • Scheduling of multiple goroutines.
  • Subscribe to os.Signal events.
  • Gracefull shutdown of units


A unit is a type that implements WorkUnit interface. The Spawn() method of each registered unit is spawned in its own goroutine.

The Manager handles communication and synchronized shutdown procedure.


  1. Create a unit manager
  2. Implement the WorkUnit on your goroutines
  3. Add units to the manager
  4. Start the manager and wait on its Quit channel
import (

type Worker struct{}

// Example loop, it will be spwaned in a goroutine
func (w *Worker) Spawn(um UnitManager) {
    ticker := time.NewTicker(time.Second)

    // Worker's loop
    for {
        select {
        case <-ticker.C:

        // Read from channel if this worker unit should stop
        case <-um.ShouldStop():

            // Shutdown work for current unit

            // Notify manager that this unit is done.

func (w *Worker) Shutdown() {
    // Do shutdown procedure for worker

func NewWorker() *Worker {
    return &Worker{}

func main() {
    // Create a unit manager
    manager := gum.NewManager()

    // Subscribe to SIGINT

    // NewWorker returns a type implementing WorkUnit interface unit :=
    worker := NewWorker()

    // Register the unit with the manager

    // Start the manager
    go manager.Start()

    // Wait for all units to shutdown gracefully through their `Shutdown` method

Issues and Comments

The github repo is just a mirror.

For any question or issues use the repo hosted at https://git.sp4ke.com/sp4ke/gum.