MCPcopy Index your code
hub / github.com/AlexanderGrom/go-event

github.com/AlexanderGrom/go-event @v1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v1.0 ↗ · + Follow
32 symbols 77 edges 4 files 17 documented · 53%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

go-event

Go Report Card GoDoc

Go-event is a simple event system.

Get the package

$ go get -u github.com/AlexanderGrom/go-event

Examples

e := event.New()
e.On("my.event.name.1", func() error {
    fmt.Println("Fire event")
    return nil
})

e.On("my.event.name.2", func(text string) error {
    fmt.Println("Fire", text)
    return nil
})

e.On("my.event.name.3", func(i, j int) error {
    fmt.Println("Fire", i+j)
    return nil
})

e.On("my.event.name.4", func(name string, params ...string) error {
    fmt.Println(name, params)
    return nil
})

e.Go("my.event.name.1") // Print: Fire event
e.Go("my.event.name.2", "some event") // Print: Fire some event
e.Go("my.event.name.3", 1, 2) // Print: Fire 3
e.Go("my.event.name.4", "params:", "a", "b", "c") // Print: params: [a b c]

A couple more examples

package main

import (
    "fmt"

    "github.com/AlexanderGrom/go-event"
)

func EventFunc(text string) error {
    fmt.Println("Fire:", text, "1")
    return nil
}

type EventStruct struct{}

func (e *EventStruct) EventFunc(text string) error {
    fmt.Println("Fire:", text, "2")
    return nil
}

func main() {
    event.On("my.event.name.1", EventFunc)
    event.On("my.event.name.1", (&EventStruct{}).EventFunc)

    event.Go("my.event.name.1", "event")
    // Print: Fire event 1
    // Print: Fire event 2
}

A more complex example

package main

import (
    "fmt"

    "github.com/AlexanderGrom/go-event"
)

type (
    Listener interface {
        Name() string
        Handle(e event.Eventer) error
    }
)

// ...

type (
    fooEvent struct {
        event.Event

        i, j int
    }

    fooListener struct {
        name string
    }
)

func NewFooEvent(i, j int) event.Eventer {
    return &fooEvent{i:i, j:j}
}

func NewFooListener() Listener {
    return &fooListener{
        name: "my.foo.event",
    }
}

func (l *fooListener) Name() string {
    return l.name
}

func (l *fooListener) Handle(e event.Eventer) error {
    ev := e.(*fooEvent)
    ev.StopPropagation()

    fmt.Println("Fire", ev.i+ev.j)
    return nil
}

// ...

func main() {
    e := event.New()

    // Collection
    collect := []Listener{
        NewFooListener(),
        // ...
    }

    // ...

    // Registration
    for _, l := range collect {
        e.On(l.Name(), l.Handle)
    }

    // ...

    // Call
    e.Go("my.foo.event", NewFooEvent(1, 2))
    // Print: Fire 3
}

Extension points exported contracts — how you extend this code

Eventer (Interface)
Eventer interface [1 implementers]
event.go
Dispatcher (Interface)
Dispatcher event interface [1 implementers]
default.go

Core symbols most depended-on inside this repo

On
called by 12
default.go
List
called by 6
default.go
New
called by 6
dispatcher.go
Has
called by 4
default.go
Remove
called by 4
default.go
Go
called by 2
default.go
StopPropagation
called by 1
event.go
IsPropagationStopped
called by 1
event.go

Shape

Method 15
Function 11
Struct 4
Interface 2

Languages

Go100%

Modules by API surface

default.go11 symbols
dispatcher.go8 symbols
event_test.go7 symbols
event.go6 symbols

For agents

$ claude mcp add go-event \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact