Golang 中使用「Event - Listener」解耦逻辑,让你的应用更简单!

hwbrzzl · · 748 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

当一个订单完成时,老板说:发个短信给用户,再发个邮件吧,同时更新下统计数据,巴拉巴拉(真事多)。 我们当然可以用 `goroutine` 处理这些耗时的任务,但优雅的一种方式是使用「事件系统(Event - Listener 模式)」来进行代码的解耦,让代码逻辑更简单! > 跟 Laravel 的使用方法完全一致,Phper 请安心服用。 ### 第一步:生成任务类 ``` go run . artisan make:event PodcastProcessed go run . artisan make:listener SendPodcastNotification ``` ### 第二步:注册事件和监听器 ``` package providers import ( "github.com/goravel/framework/contracts/events" "github.com/goravel/framework/support/facades" ) type EventServiceProvider struct { } ... func (receiver *EventServiceProvider) listen() map[events.Event][]events.Listener { return map[events.Event][]events.Listener{ &events.OrderShipped{}: { &listeners.SendShipmentNotification{}, }, } } ``` ### 第三步:实现 Listener 逻辑 巴拉巴拉 ### 第四步:调度事件 ``` err := facades.Event.Job(&events.OrderShipped{}, []events.Arg{ {Type: "string", Value: "abcc"}, {Type: "int", Value: 1234}, }).Dispatch() ``` Over, 更多功能[详见文档](https://www.goravel.dev/cn/zong-he-hua-ti/shi-jian-xi-tong "详见文档"),小伙伴们开始愉快的搞事情吧! ## 关于 Goravel Goravel 是一个功能完备、具有良好扩展能力的 Web 应用程序框架。 作为一个起始脚手架帮助 Golang 开发者快速构建自己的应用。 项目地址:[https://github.com/goravel/goravel](https://github.com/goravel/goravel "https://github.com/goravel/goravel") 文档地址:[www.goravel.dev](https://www.goravel.dev "www.goravel.dev") ![golang横-500.png](https://static.golangjob.cn/220424/0e7c588cd1e98b26d6803cbf8af2d478.png)

有疑问加站长微信联系(非本文作者))

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

748 次点击  
加入收藏 微博
1 回复  |  直到 2022-08-24 16:05:47
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传