# event **Repository Path**: gousing/event ## Basic Information - **Project Name**: event - **Description**: 开箱即用的 Gousing Event, 提供全局默认默认事件总线 Event, 支持自定义Event, 提供异步、同步两种订阅模式,提供单次、长期订阅两种订阅方式,提供状态管理。 - **Primary Language**: Go - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-03-14 - **Last Updated**: 2025-07-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Gousing Event ### 介绍 开箱即用的 Gousing Event, 提供全局默认默认事件总线 Event, 支持自定义 Event, 提供异步、同步两种订阅模式,提供单次、长期订阅两种订阅方式,提供状态管理。 ### 安装 ```golang go get -u github.com/gousing/event ``` ### 使用 开箱即用, 全局默认默认事件总线 ```golang import "github.com/gousing/event" // type EventData map[string]any // type EventHandler func(data EventData) error // 自定义事件 EventHandler handler1 := func(data event.EventData) error { // do something return nil } handler2 := func(data event.EventData) error { // do something return nil } // SubscribeXXX订阅事件 event.Subscribe("eventName1", handler1) event.SubscribeSync("eventName2", handler2) // Publish 发布事件 event.Publish("eventName1", event.EventData{name:"abc",userId:123}) event.Publish("eventName2", nil) // Unsubscribe 取消订阅 event.Unsubscribe("eventName1", handler1) event.Unsubscribe("eventName2", handler2) // 更多接口见 EventBusIO ``` // 自定义更多的事件总线 ```golang import "github.com/gousing/event" // NewEventBus 创建一个事件总线 // NewEventBus(name string) EventBusIO bus := event.NewEventBus("MyBus") // bus.Name() // MyBus bus.Subscribe("event:handler01", func(data EventData) error { return nil }) // 更多接口见 EventBusIO ``` ### EventBusIO ```golang type EventData map[string]any type EventHandler func(data EventData) error type EventBusIO interface { // Subscribe 异步方式订阅事件(长期订阅) // - eventName 事件名称 // - eventHandler 回调函数 Subscribe(eventName string, eventHandler EventHandler) error // SubscribeOnce 异步方式订阅事件(仅订阅一次) // - eventName 事件名称 // - eventHandler 回调函数 SubscribeOnce(eventName string, eventHandler EventHandler) error // SubscribeSync 同步方式订阅事件(长期订阅) // - eventName 事件名称 // - eventHandler 回调函数 SubscribeSync(eventName string, eventHandler EventHandler) error // SubscribeSyncOnce 同步方式订阅事件(仅订阅一次) // - eventName 事件名称 // - eventHandler 回调函数 SubscribeSyncOnce(eventName string, eventHandler EventHandler) error // Unsubscribe 取消订阅事件 // - eventName 事件名称 // - eventHandler 回调函数(订阅事件时的同一个回调函数) Unsubscribe(eventName string, eventHandler EventHandler) error // Publish 发布事件, 触发事件广播 // - eventName 事件名称 // - data 事件参数 无参数时为nil Publish(eventName string, data EventData) error // Name 获取EventBus的名称 Name() string // State 获取EventBus的状态 State() bool // Disabled 禁用EventBus Disabled() // Enabled 启用EventBus Enabled() // GetEvents 获取EventBus的全部事件订阅信息 GetEvents() EventsInfo // EventState 获取某一个事件的状态 // - eventName 事件名称 StateEvent(eventName string) bool // EventDisable 禁用某一个事件 // - eventName 事件名称 DisabledEvent(eventName string) error // EventEnabled 启用某一个事件 // - eventName 事件名称 EnabledEvent(eventName string) error } ``` ### Benchmark ```shell go.exe test -benchmem -run=^$ -bench ^Benchmark* gitee.com/gousing/event -v goos: windows goarch: amd64 pkg: gitee.com/gousing/event cpu: 12th Gen Intel(R) Core(TM) i5-12400F ``` | Benchmark | - | - | - | - | | :--------------------------------------- | :------ | :---------- | :------- | :----------- | | Benchmark_Event_Subscribe-12 | 2319598 | 474.0 ns/op | 111 B/op | 2 allocs/op | | Benchmark_Event_Subscribe_Publish-12 | 989061 | 1390 ns/op | 672 B/op | 17 allocs/op | | Benchmark_Event_SubscribeSync-12 | 2278284 | 465.1 ns/op | 95 B/op | 2 allocs/op | | Benchmark_Event_SubscribeSync_Publish-12 | 1201126 | 1011 ns/op | 592 B/op | 16 allocs/op | ### Gousing 通用选项 #### 自定义 Logger ```golang // Event 日志默认使用Golang标准库slog.Default()全局日志记录日志 // event.SetLogger(*slog.Logger) myLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil)) event.SetLogger(myLogger) ```