答案:Go通过接口和组合实现观察者模式,定义Event、Observer和Subject接口,用EventBus管理观察者注册与通知,结合具体观察者如Logger和EmailNotifier处理事件,支持动态注册注销,适用于解耦事件发布与处理,建议异步通知避免阻塞。

在Go语言中实现观察者模式来监听和处理事件,是一种常见且有效的方式,尤其适用于解耦事件发布者与多个事件处理器之间的依赖。虽然Go没有类和继承机制,但通过接口和组合,能简洁地实现Observer(观察者)模式。
观察者模式的核心是“主题”(Subject)维护一个观察者列表,当状态变化时通知所有观察者。先定义基本接口:
type Event struct {
Type string
Data interface{}
}
<p>type Observer interface {
OnEvent(event Event)
}</p><p>type Subject interface {
Register(observer Observer)
Unregister(observer Observer)
Notify(event Event)
}
Event 是传递的数据结构,Observer 定义响应事件的方法,Subject 提供注册、注销和广播的接口。
创建一个具体的主题实现,比如 EventBus:
立即学习“go语言免费学习笔记(深入)”;
type EventBus struct {
observers []Observer
}
<p>func (bus *EventBus) Register(observer Observer) {
bus.observers = append(bus.observers, observer)
}</p><p>func (bus *EventBus) Unregister(observer Observer) {
for i, obs := range bus.observers {
if obs == observer {
bus.observers = append(bus.observers[:i], bus.observers[i+1:]...)
break
}
}
}</p><p>func (bus *EventBus) Notify(event Event) {
for _, observer := range bus.observers {
observer.OnEvent(event)
}
}
这个 EventBus 可以动态添加或移除观察者,并在事件发生时逐一通知。
观察者可以是任意实现了 OnEvent 方法的类型。例如,日志记录和邮件通知两个处理器:
type Logger struct{}
<p>func (l *Logger) OnEvent(event Event) {
fmt.Printf("LOG: %s - %v\n", event.Type, event.Data)
}</p><p>type EmailNotifier struct{}</p><p>func (e *EmailNotifier) OnEvent(event Event) {
if event.Type == "user.created" {
fmt.Printf("EMAIL SENT to %v\n", event.Data)
}
}
不同观察者可根据事件类型执行特定逻辑,实现关注点分离。
将各组件组合起来:
func main() {
bus := &EventBus{}
logger := &Logger{}
notifier := &EmailNotifier{}
<pre class="brush:php;toolbar:false;"><pre class="brush:php;toolbar:false;">bus.Register(logger)
bus.Register(notifier)
bus.Notify(Event{
Type: "user.created",
Data: "alice@example.com",
})
bus.Unregister(notifier)
bus.Notify(Event{
Type: "config.updated",
Data: "timeout=30s",
})}
输出会显示:两条日志,一条邮件通知,第二条事件只被日志接收,说明注销生效。
基本上就这些。Go的接口和匿名组合让观察者模式实现非常轻量,适合用于配置变更通知、消息广播、插件系统等场景。关键是保持事件结构清晰,避免观察者阻塞主流程,必要时可用 goroutine 异步通知。
以上就是Golang如何使用观察者模式监听事件_Golang Observer模式事件处理方法的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号