EventBus
EventbBus是一个事件总线,用于在应用程序中处理事件。
源码:
用法:
go
import (
"github.com/duke-git/lancet/v2/eventbus"
)
目录
- NewEventBus
- Subscribe
- Unsubscribe
- Publish
- ClearListeners
- ClearListenersByTopic
- GetListenersCount
- GetAllListenersCount
- GetEvents
- SetErrorHandler
文档
NewEventBus
创建EventBus实例。
函数签名:
go
func NewEventBus[T any]() *EventBus[T]
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
receivedData := 0
listener := func(eventData int) {
receivedData = eventData
}
eb.Subscribe("event1", listener, false, 0, nil)
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
fmt.Println(receivedData)
// Output:
// 1
}
Subscribe
订阅具有特定事件主题和监听函数的事件。支持异步,事件优先级,事件过滤器。
函数签名:
go
func (eb *EventBus[T]) Subscribe(topic string, listener func(eventData T), async bool, priority int, filter func(eventData T) bool)
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
receivedData := 0
listener := func(eventData int) {
receivedData = eventData
}
filter := func(eventData int) bool {
return eventData == 1
}
eb.Subscribe("event1", listener, false, 0, filter)
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 2})
fmt.Println(receivedData)
// Output:
// 1
}
Unsubscribe
取消订阅具有特定事件主题的事件。
函数签名:
go
func (eb *EventBus[T]) Unsubscribe(topic string, listener func(eventData T))
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
receivedData := 0
listener := func(eventData int) {
receivedData = eventData
}
eb.Subscribe("event1", listener, false, 0, nil)
eb.Unsubscribe("event1", listener)
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
fmt.Println(receivedData)
// Output:
// 0
}
Publish
发布一个带有特定事件主题和数据负载的事件。
函数签名:
go
func (eb *EventBus[T]) Publish(event eventbus.Event[T])
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
eb.Subscribe("event1", func(eventData int) {
fmt.Println(eventData)
}, false, 0, nil)
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
// Output:
// 1
}
ClearListeners
清空所有事件监听器。
函数签名:
go
func (eb *EventBus[T]) ClearListeners()
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
receivedData := 0
listener := func(eventData int) {
receivedData = eventData
}
eb.Subscribe("event1", listener, false, 0, nil)
eb.Subscribe("event2", listener, false, 0, nil)
eb.ClearListeners()
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
eb.Publish(eventbus.Event[int]{Topic: "event2", Payload: 2})
fmt.Println(receivedData)
// Output:
// 0
}
ClearListenersByTopic
清空特定事件监听器。
函数签名:
go
func (eb *EventBus[T]) ClearListenersByTopic(topic string)
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
receivedData := 0
listener := func(eventData int) {
receivedData = eventData
}
eb.Subscribe("event1", listener, false, 0, nil)
eb.Subscribe("event2", listener, false, 0, nil)
eb.ClearListenersByTopic("event1")
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
eb.Publish(eventbus.Event[int]{Topic: "event2", Payload: 2})
fmt.Println(receivedData)
// Output:
// 2
}
GetListenersCount
获取特定事件的监听器数量。
函数签名:
go
func (eb *EventBus[T]) GetListenersCount(topic string) int
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
eb.Subscribe("event1", func(eventData int) {}, false, 0, nil)
eb.Subscribe("event2", func(eventData int) {}, false, 0, nil)
count := eb.GetListenersCount("event1")
fmt.Println(count)
// Output:
// 1
}
GetAllListenersCount
获取所有事件的监听器数量。
函数签名:
go
func (eb *EventBus[T]) GetAllListenersCount() int
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
eb.Subscribe("event1", func(eventData int) {}, false, 0, nil)
eb.Subscribe("event2", func(eventData int) {}, false, 0, nil)
count := eb.GetAllListenersCount()
fmt.Println(count)
// Output:
// 2
}
GetEvents
获取所有事件的topic。
函数签名:
go
func (eb *EventBus[T]) GetEvents() []string
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
eb.Subscribe("event1", func(eventData int) {}, false, 0, nil)
eb.Subscribe("event2", func(eventData int) {}, false, 0, nil)
events := eb.GetEvents()
for _, event := range events {
fmt.Println(event)
}
// Output:
// event2
// event1
}
SetErrorHandler
设置事件的错误处理函数。
函数签名:
go
func (eb *EventBus[T]) SetErrorHandler(handler func(err error))
示例:运行
go
import (
"fmt"
"github.com/duke-git/lancet/v2/eventbus"
)
func main() {
eb := eventbus.NewEventBus[int]()
eb.SetErrorHandler(func(err error) {
fmt.Println(err)
})
eb.Subscribe("event1", func(eventData int) {
panic("error")
}, false, 0, nil)
eb.Publish(eventbus.Event[int]{Topic: "event1", Payload: 1})
// Output:
// error
}