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 31be968b7b update readme 2 years ago
README.md update readme 2 years ago
manager.go refactoring 2 years ago
manager_test.go refactoring 2 years ago



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


  • Scheduling of multiple goroutines.
  • Shutdown on 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. Run the manager and wait on its Quit channel
import (
    gum "git.sp4ke.com/sp4ke/gum.git"

type Worker struct{}

// Example loop, will be spwaned inside 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()

    // Shutdown all units on SIGINT

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

    // Register the unit with the manager

    // Run the manager
    go manager.Run()

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

Issues and Comments

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