event

package module
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jul 15, 2025 License: Apache-2.0 Imports: 10 Imported by: 0

README

Gousing Event

介绍

开箱即用的 Gousing Event, 提供全局默认默认事件总线 Event, 支持自定义 Event, 提供异步、同步两种订阅模式,提供单次、长期订阅两种订阅方式,提供状态管理。

安装
go get -u github.com/gousing/event
使用

开箱即用, 全局默认默认事件总线

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

// 自定义更多的事件总线

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

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
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
// Event 日志默认使用Golang标准库slog.Default()全局日志记录日志
// event.SetLogger(*slog.Logger)
myLogger := slog.New(slog.NewJSONHandler(os.Stdout, nil))
event.SetLogger(myLogger)

Documentation

Index

Constants

View Source
const GlobalEventBusName = "global"

对外可用的全局事件总线

Variables

View Source
var (
	ErrBusDisable   = errors.New("disabled EventBus state")
	ErrEventDisable = errors.New("disabled Event state")
	ErrEventName    = errors.New("invalid EventName")
	ErrEventHandler = errors.New("invalid EventHandler")
)

Functions

func Disabled

func Disabled()

Disabled 禁用EventBus

func DisabledEvent

func DisabledEvent(eventName string) error

EventDisable 禁用某一个事件

  • eventName 事件名称

func Enabled

func Enabled()

Enabled 启用EventBus

func EnabledEvent

func EnabledEvent(eventName string) error

EventEnabled 启用某一个事件

  • eventName 事件名称

func GetLogger added in v1.0.1

func GetLogger() *slog.Logger

func Name

func Name() string

Name 获取事件总线的名称

func Publish

func Publish(eventName string, data EventData) error

Publish 发布事件, 触发事件广播

  • eventName 事件名称
  • data 事件参数 无参数时为nil

func SetLogger

func SetLogger(log *slog.Logger)

func State

func State() bool

State 获取EventBus的状态

func StateEvent

func StateEvent(eventName string) bool

StateEvent 获取某一个事件的状态

  • eventName 事件名称

func Subscribe

func Subscribe(eventName string, eventHandler EventHandler) error

Subscribe 异步方式订阅事件(长期订阅)

  • eventName 事件名称
  • eventHandler 回调函数

func SubscribeOnce

func SubscribeOnce(eventName string, eventHandler EventHandler) error

SubscribeOnce 异步方式订阅事件(仅订阅一次)

  • eventName 事件名称
  • eventHandler 回调函数

func SubscribeSync

func SubscribeSync(eventName string, eventHandler EventHandler) error

SubscribeSync 同步方式订阅事件(长期订阅)

  • eventName 事件名称
  • eventHandler 回调函数

func SubscribeSyncOnce

func SubscribeSyncOnce(eventName string, eventHandler EventHandler) error

SubscribeSyncOnce 同步方式订阅事件(仅订阅一次)

  • eventName 事件名称
  • eventHandler 回调函数

func Unsubscribe

func Unsubscribe(eventName string, eventHandler EventHandler) error

Unsubscribe 取消订阅事件

  • eventName 事件名称
  • eventHandler 回调函数(订阅事件时的同一个回调函数)

Types

type EventBusIO

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
}

func Global

func Global() EventBusIO

func NewEventBus

func NewEventBus(name string) EventBusIO

NewEventBus 创建一个事件总线

type EventData

type EventData map[string]any

type EventHandler

type EventHandler func(data EventData) error

type EventsInfo

type EventsInfo struct {
	Count  int            // 全部事件订阅总数量(异步+同步)
	Events map[string]int // 事件名=>订阅总数量(异步+同步)
}

func GetEvents

func GetEvents() EventsInfo

GetEvents 获取事件总线的全部事件信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL