https://github.com/xgfone/go-event
A simple event emmiter for Go. Inspired by Nodejs EventEmitter(https://nodejs.org/api/events.html)
https://github.com/xgfone/go-event
emitter event event-emitter event-sourcing eventbus eventemitter events
Last synced: 6 months ago
JSON representation
A simple event emmiter for Go. Inspired by Nodejs EventEmitter(https://nodejs.org/api/events.html)
- Host: GitHub
- URL: https://github.com/xgfone/go-event
- Owner: xgfone
- License: apache-2.0
- Created: 2019-12-06T14:51:47.000Z (almost 6 years ago)
- Default Branch: master
- Last Pushed: 2022-04-25T12:01:12.000Z (over 3 years ago)
- Last Synced: 2025-01-31T08:43:49.969Z (8 months ago)
- Topics: emitter, event, event-emitter, event-sourcing, eventbus, eventemitter, events
- Language: Go
- Homepage:
- Size: 26.4 KB
- Stars: 2
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# go-event [](https://github.com/xgfone/go-event/actions/workflows/go.yml) [](http://godoc.org/github.com/xgfone/go-event) [](https://raw.githubusercontent.com/xgfone/go-event/master/LICENSE)
A simple event emmiter for Go `1.5+`. Inspired by [`Nodejs EventEmitter`](https://nodejs.org/api/event.html).
## Installation
```shell
$ go get -u github.com/xgfone/go-event
```## Example
```go
package mainimport (
"fmt"
"sort""github.com/xgfone/go-event"
)func main() {
newListener := func(listenerName string) event.ListenerFunc {
return func(event string, data ...interface{}) {
fmt.Printf("listener=%s, event=%s, data=%v\n", listenerName, event, data)
}
}ln1 := newListener("ln1")
ln2 := newListener("ln2")
ln3 := newListener("ln3")event.On("e1", "ln1", ln1)
event.On("e1", "ln2", ln2)
event.OnFunc("e2", "ln2", ln2)
event.OnFunc("e2", "ln3", ln3)
event.OnFunc("e3", "ln3", ln3)
event.OnceFunc("e3", "ln1", ln1) // Only trigger onceevents := event.Events()
sort.Strings(events)
fmt.Printf("Events: %v\n", events)event.Emit("e1", "data1")
event.Emit("e2", "data2")
event.Emit("e3", "data3")event.Off("e1", "ln1")
event.Off("e2", "ln2")
event.Off("e3", "ln3")events = event.Events()
sort.Strings(events)
fmt.Printf("Events: %v\n", events)event.Emit("e1", "data4")
event.Emit("e2", "data5")
event.Emit("e3", "data6")event.EmitAsync("e1", "data7").Wait()
event.EmitAsync("e2", "data8").Wait()
event.EmitAsync("e3", "data9").Wait()// Remove the event "e2" and all its listeners.
event.Off("e2", "")events = event.Events()
sort.Strings(events)
fmt.Printf("Events: %v\n", events)// Remove all the events and their listeners.
event.Off("", "")events = event.Events()
sort.Strings(events)
fmt.Printf("Events: %v\n", events)// Output:
// Events: [e1 e2 e3]
// listener=ln1, event=e1, data=[data1]
// listener=ln2, event=e1, data=[data1]
// listener=ln2, event=e2, data=[data2]
// listener=ln3, event=e2, data=[data2]
// listener=ln3, event=e3, data=[data3]
// listener=ln1, event=e3, data=[data3]
// Events: [e1 e2]
// listener=ln2, event=e1, data=[data4]
// listener=ln3, event=e2, data=[data5]
// listener=ln2, event=e1, data=[data7]
// listener=ln3, event=e2, data=[data8]
// Events: [e1]
// Events: []
}
```