zoobzio December 8, 2025 Edit this page

Quickstart

Requirements

Go 1.23 or later.

Installation

go get github.com/zoobz-io/capitan

Basic Usage

package main

import (
    "context"
    "fmt"

    "github.com/zoobz-io/capitan"
)

// Define signals as package-level variables
var orderCreated = capitan.NewSignal("order.created", "New order placed")

// Define keys as package-level variables
var orderID = capitan.NewStringKey("order_id")

func main() {
    // Hook a listener
    capitan.Hook(orderCreated, func(ctx context.Context, e *capitan.Event) {
        id, ok := orderID.From(e)
        if !ok {
            return
        }
        fmt.Printf("Order received: %s\n", id)
    })

    // Emit an event
    capitan.Emit(context.Background(), orderCreated, orderID.Field("ORDER-123"))

    // Drain pending events before exit
    capitan.Shutdown()
}

What's Happening

  1. NewSignal creates an event type identifier
  2. NewStringKey creates a typed key for string fields
  3. Hook registers a listener for a specific signal
  4. Emit queues an event for async processing
  5. Shutdown waits for all pending events to process