gookit/event - Go 实现的轻量级的事件管理、调度程序库

325 天前
 jxia

gookit/event Go 实现的轻量级的事件管理、调度程序库, 支持设置监听器的优先级, 支持使用通配符来进行一组事件的监听。

功能简介

安装

go get github.com/gookit/event

主要方法

快速使用

package main

import (
    "fmt"

    "github.com/gookit/event"
)

func main() {
    // 注册事件监听器
    event.On("evt1", event.ListenerFunc(func(e event.Event) error {
        fmt.Printf("handle event: %s\n", e.Name())
        return nil
    }), event.Normal)

    // 注册多个监听器
    event.On("evt1", event.ListenerFunc(func(e event.Event) error {
        fmt.Printf("handle event: %s\n", e.Name())
        return nil
    }), event.High)

    // ... ...

    // 触发事件
    // 注意:第二个监听器的优先级更高,所以它会先被执行
    event.MustFire("evt1", event.M{"arg0": "val0", "arg1": "val1"})
}

Note: 注意:第二个监听器的优先级更高,所以它会先被执行

异步消费事件

可以使用 Async/FireC/FireAsync 方法触发事件,事件将会写入 chan 异步消费。可以使用 CloseWait() 关闭 chan 并等待事件全部消费完成。

新增配置选项:

func main() {
    // 注意:在程序退出时关闭事件 chan
    defer event.Close()
    // defer event.CloseWait()

    // 注册事件监听器
    event.On("app.evt1", event.ListenerFunc(func(e event.Event) error {
        fmt.Printf("handle event: %s\n", e.Name())
        return nil
    }), event.Normal)

    // 注册多个监听器
    event.On("app.evt1", event.ListenerFunc(func(e event.Event) error {
        fmt.Printf("handle event: %s\n", e.Name())
        return nil
    }), event.High)

    // ... ...

    // 异步消费事件
    event.FireC("app.evt1", event.M{"arg0": "val0", "arg1": "val1"})
}

Note: 应当在程序退出时关闭事件 chan. 可以使用下面的方法:

更多

更多使用说明请看 README

948 次点击
所在节点    Go 编程语言
2 条回复
ruanimal
324 天前
感觉写 go 的真牛 x ,各种库信手拈来
bv
324 天前
@ruanimal Go 有啥牛 X 的,这不就是个观察者模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/950039

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX