event emitter

event emitter


Node.js

const EventEmitter = require('events')
class MyEmitter extends EventEmitter {}
const myEmitter = new MyEmitter()

myEmitter.on('my-event', msg => {
  console.log(msg)
})

myEmitter.on('my-other-event', msg => {
  console.log(msg)
})

myEmitter.emit('my-event', 'hello world')
myEmitter.emit('my-other-event', 'hello other world')

Output

hello world
hello other world

Go

(closest thing is to use channels)

package main

import (
    "fmt"
)

type MyEmitter map[string]chan string

func main() {
    myEmitter := MyEmitter{}
    myEmitter["my-event"] = make(chan string)
    myEmitter["my-other-event"] = make(chan string)

    go func() {
        for {
            select {
            case msg := <-myEmitter["my-event"]:
                fmt.Println(msg)
            case msg := <-myEmitter["my-other-event"]:
                fmt.Println(msg)
            }
        }
    }()

    myEmitter["my-event"] <- "hello world"
    myEmitter["my-other-event"] <- "hello other world"
}

Output

hello world
hello other world