七叶笔记 » golang编程 » golang代码解耦库推荐——Event

golang代码解耦库推荐——Event

这里说的代码解耦不是指用消息队列时那种业务解耦,而是代码层面的逻辑解耦。比如某个控件输入变化时,希望通知到其他代码组件模块,这时候直接调用相关的接口会让代码显得非常生硬,难以维护。这时候事件分发可以让这种逻辑显得更加灵活易扩展,维护起来更加容易。

这里推荐一个golang项目上非常实用的事件分发库——Event,安装方式如下

 go get -v github.com/gookit/event  

使用方式可以说是非常简单,支持同步、异步通知,还能添加触发器。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)

// 需要注意的是会按优先级触发事件执行

// Trigger event
// 同步触发事件,异常会panic
event.MustFire("evt1", event.M{"arg0": "val0", "arg1": "val1"})
  
  // 同步触发事件,返回error
err := event.MustFire("evt1", event.M{"arg0": "val0", "arg1": "val1"})
  
  // 异步触发
event.AsyncFire("evt1", event.M{"arg0": "val0", "arg1": "val1"})
}  

看了Event库之后是不是觉得很多业务逻辑可以很方便的进行解耦了呢? 欢迎评论区讨论!

相关文章