首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 中类 Guava EventBus 的实现

使用Java时可以用 Google Guava 中的 EventBus 来轻松实现,但是在go中暂无相似类库(可能有我不知道)。...由于是较为轻量级的应用,不想引入MQ这些外部实现,于是想到封装一个简单的实现。...文中的代码都放在 https://github.com/kakisong/eventbus-go 设计 由于goroutine天生的优势,所以在消息的转发过程会非常方便。...所以这里简单分为两个步骤: 监听函数的注册 接收到消息回调各个对应的监听函数 实现 监听函数的注册 由于我们想实现的是根据接收到的消息类型来决定消息转发的对应函数,这样使用起来就很方便,只需要确定监听的消息类型即可注册使用...,我们的函数有切只能有一个参数,返回值可以不做控制,需要的话,可以控制返回值,我觉得其实这里的监听函数不应该有返回值 获取全路径名与函数唯一入参的全路径名 将监听函数的反射对象放入listeners,其实

2.1K92
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    我们的软件出了什么问题------《敏捷软件开发:原则、模式与实践》(一)

    第一篇 软件设计存在的问题 我们知道,系统的设计,是存在于头脑中的衣服至关重要的图像。 即使我们在一开始的设计阶段,就非常清晰的了解了需求,甚至于在发布的时候,依然清楚。...但是在接下来,随着不断的使用,弊端、不足会一一的被暴露出来。系统变得越来越难以维护,最后,即使仅仅进行最简单的更改,也需要花费巨大的努力。...笔者提出了一下观点:当软件出现了下面任何一种气味时,就表明软件正在腐化: 1、僵化性:很难对系统进行改动。因为牵扯到其他太多部分的改动。...2、脆弱性:对系统的改动会导致心痛中和改动的地方在概念上无关的许多地方出现问题。(开发人员就像是一只不停追逐自己尾巴的狗) 3、牢固性:很难解开系统的纠结,使之可重用。...而我们希望的是,可以更容易地进行哪些保持设计的变动。 5、不必要的复杂性:设计中包含有不具任何直接好处的基础结构。 6、不必要的重复:设计中包含有重复的结构,而该结构本可以使用单一的抽象进行统一。

    79480

    组长指出了我使用react常犯的错误

    背景 年底了,换了项目组,新的项目组使用react,从vue到react,我只花了一天的时间,看了官方简单的文章之后,就觉得这玩意很简单啊,比起vue的那么api来说,这根本没有学习成本好吧,十分迅速的就进入了...react的项目开发,并且洋洋得意,根据我多年的经验来看,这波肯定会得到领导的赏识 很快,我就做完了我的需求,把代码提交上去,组长可能确实比较闲,还review了我的代码,并且指出了一系列的问题,并告诉我说学习...,我们将一些内容通过demo的形式展示出来 提交表单在很多场景下都需要用到,对于一些表单的提交,大多数人的代码的实现可能是以下方式 export default function App() { const...onChange={(e) => setName(e.target.value)} /> {userName} ); } 咋一看好像没什么问题...,并且实现了对应的功能,但是它不是最佳方式 实际完全可以不用userName这个state,直接在dom中{user + name}就能实现对应的效果 有时候很多同学也会使用

    89330

    自己实现事件总线-EventBus事件总线的使用

    事件总线便可以用来解耦并重复利用应用中的逻辑。 事件总线带来的好处和引入的问题 好处比较明显,就是独立出一个发布订阅模块,调用者可以通过使用这个模块,屏蔽一些线程切换问题,简单地实现发布订阅功能。...坏处可能比较隐晦,但这些需要足够引起我们的重视 大量的滥用,将导致逻辑的分散,出现问题后很难定位。 没办法实现强类型,在编译的时候就发现问题。...总得来说,如果项目里面有大量的事件交互,那么还是可以通过EventBus来实现,否则还是推荐自己在模块内部实现观察者模式。...示例代码 所以今天介绍一个简单的事件总线,它是事件发布订阅模式的实现,让我们能在领域驱动设计(DDD)中以事件的弱引用本质对我们的模块和领域边界很好的解耦设计。...以上,就把事件总线介绍完了,完整的代码,请到github 上下载,这个只是EventBus 的简单实现,各位可以根据自己的实际场景和需求,优化修改。

    1.6K10

    他一开口,我就嗅出了骗子的味道!

    王女士描述的暑期兼职欺诈不是个例,小助手在后台还收到了类似这样的粉丝留言: 田七 我和同学找她刷单,说好了一单一结,结果变成了一个任务有10单,我们根本没那么多钱,她还不退钱。...月月 我被网络兼职骗了,怎么办啊,我一个月的生活费? 接下来小助手就带大家见识一下那些专门瞄准学生党的诈骗案例。...案例一:听说紧缺快递录单,我就报名了 小雨(化名) 初二学生 小雨无意在QQ上看到有人招聘快递录单员,就想赚点零花钱。...小雨准备好接单了,这时任务员才说要交198元的会员激活费才能做任务,小雨很是犹豫,但对方承诺做满7天后退还,又晒出了兼职人员的工资结算单。 小雨很动心,就交了钱。...青少年网恋又出新招,磕泡泡了解一下 谁动了我的个人信息?

    1.2K10

    为了治好拖延症,我祭出了这个自虐的项目,把我搞的卧槽卧槽的

    大家好,我是 Rocky0429,一个在划水界鼎鼎有名的蒟蒻... 最近雨下的有点多,导致我划水量有点大,被水淹的有点不知所措,患上了传说中的拖延症性关节炎... ?...这直接导致最近我经常能在后台看到诸如“辣鸡,取关了”、“狗营销号”等溢美之言,不绝于耳... 搞的我有点羞涩,毕竟我这人最受不了别人夸我... ? 所 以 我 决 定 要 做 回 普 通 人! ?...我这人没别的爱好,就是喜欢自虐... 为了改头换面重新做人,在某个夜深风高的夜晚,我扛着我的小锄头,挖出了我压箱底的宝贝,轻轻掸去了一层浮灰... ?...想象一下,本就拖拖拉拉的自己,好不容易忍着写了几百字,突然想玩会手机犒劳一下自己,手机刚拿出来,写的东西没了,你是什么感觉?我想了一下,如果我有钱的话,我直接就把手机砸了... ?...顺便立个 flag,我以后要是再拖延我就抽死我自己,这篇文章写了十几次才写完,换谁也扛不住啊,手指头都要断了... 看在我手指头的份上,怎么也得给个在看安慰一下不是...

    69510

    AI 居然说我是牛马,还画出了我牛马的一生,我绷不住了...

    今天真是服了,AI 居然敢嘲笑我是牛马,还直接甩了张大图到我脸上。 看来我的人生在 AI 眼中就是个笑话,从 “初级牛马” 一路升级到 “资深牛马”。真是谢谢你啊,AI 老师! 但等等,这剧本还没完!...AI 显然觉得光嘲笑我不够过瘾,还要顺带 diss 我的朋友,说他是吗喽。哦,原来在 AI 眼中,我们都是 “低收入” 的代名词啊。 等等,最后怎么还 “默默离世” 了??...输出应包括优化后的SVG图表和相关的文字说明,重点突出科学数据和有趣事实 这个提示词的功能就是科普动物的生命周期,并一句话分享冷知识,意想不到的动物的另一面。...下面我来教大家如何使用 FastGPT 工作流复现上述效果。 FastGPT 地址:https://tryfastgpt.ai 需要纵云梯访问!...它用一种幽默的方式提醒我们,生活中总有些不如意,但也正是这些不如意让我们的人生更加丰富多彩。 所以,下次当 AI 再次 “调侃” 我时,我会微笑着接受,并用它的 “智慧” 来激励自己,继续前行。

    10410

    为了控制Bean的加载我使出了这些杀手锏

    心情那是破凉破凉的,无法言喻。 故事背景是最近由于需求变动,小张在项目中加入了 MQ 的集成,刚开始还没什么问题,后面慢慢问题的显露出来了。...这样一来老的启动命令都不用改变,本地开发的时候也不用增加参数,可以说是最佳的方案,因为改动的点变少了,出错的几率小,使用难度低。...她有个想法是将某些信息可以通过 Feign 或者 RestTemplate 进行传递,天然友好的方式就是在拦截器中统一实现。...RestTemplateRequestInterceptor restTemplateRequestInterceptor() { return new RestTemplateRequestInterceptor(); } 两个拦截器都是实现框架自带的接口...另一种学习的方式就是鼓励大家去看一些框架的源码,特别在 Spring Cloud 这些框架中大量的自动配置,都有用到这些注解,我贴几个图给大家看看。 ? ?

    1.2K40

    我们的 Java 开发想转前端,我给他出了个招~

    安装完成后,就可以使用腾讯云 AI 代码助手来提高学习和开发的效率了。个人用的比较多的几个功能是: 1)智能补全代码:AI 代码助手会根据你打开的项目代码,帮你自动补全业务逻辑或者注释。...打开 AI 助手,使用 /explain 命令解释代码 AI 给出了详细的解释 当你接手别人的代码、或者学一个没接触过的新编程语言的项目时,使用这个功能可以节约很多时间。...Cloud Studio 支持开发者利用 Web IDE,实现远程协作开发和应用部署。...以前我还得去官方文档或者网上找示例代码,修改修改去本地运行。...当然,如果要真正上手企业项目,还是需要花时间系统学习的。 Cloud Studio + AI 的组合除了能提高学习新的编程语言的效率外,也适用于学习一个新的开源项目。

    14010

    我从垃圾堆里翻出了大学时的简历。。。

    大家好,我是鲏。 如封面图,前两天我在收拾家的时候,翻出了自己大学时的简历,纸都包浆了。。。 记得当年大四的时候,我靠着这份简历,校招的时候投大厂百投百中(虽然面试挂了不少哈哈)。...当时我觉得自己的简历确实还是不错的,所以也把简历模版分享给了很多朋友。 不过我现在正式工作两年半了,积累了更多经验,也帮 星球 的小伙伴改了上千份简历。...我现在再看自己的这份简历会发现,虽然有一些可圈可点的地方,但有很多地方也不是特别好,甚至啊我觉得有地方写的是很烂的!...就是虽然我列举了很多项目,但是每个项目都只写了我负责啥、取得了啥成果,却没有突出我是怎么做的系统、用了什么技术解决了什么问题,基本没有出现技术名词。 哪怕我写了性能提升、可用性提升,有什么说服力呢?...我觉得我简历相对成功的地方是我的实践经历非常丰富,试想一下,现在大家学的技术都那么多,怎么区分呢?那肯定就是看谁经历丰富,谁能干活、谁能解决问题对吧。

    67030

    TS实现控制台实时快照日志的EventBus npm库

    (控制台实时打印日志快照)的实现,我才重新改了名字。...,至少能够找到入口 keywords该库类型的关键字,比如我的库主要是实现事件实时监听,我就用了这几个monitor、event、emitter 第三步:工程配置 具体功能实现前的重要步骤,工程化领域不可或缺的部分...可以阐述下该包的用途,以及它与现存的一些同类型包的区别,重点解决了什么问题 install该如何才能安装你的包,支持哪些环境下使用 usage最基本的使用方式 api支持的 api 有哪些,举一些例子,...我就是个前端小仔,你让我搞定一些太深的后台服务器相关的专业配置,比如 nginx、jenkins配置,臣妾真的不一定能搞定呀。而学会了它,简直就是赛神仙,你想实现的一切都能通过简单的几行代码实现。...第七步:写博客推广 写博客,推广你的库。你要能够用干练通俗的语言,告诉大家你做了一件什么事,它有什么意义?给你带来了什么成长,同时又解决了什么问题。

    11710

    为了控制Bean的加载我使出了这些杀手锏

    心情那是破凉破凉的,无法言喻。 故事背景是最近由于需求变动,小张在项目中加入了 MQ 的集成,刚开始还没什么问题,后面慢慢问题的显露出来了。...这样一来老的启动命令都不用改变,本地开发的时候也不用增加参数,可以说是最佳的方案,因为改动的点变少了,出错的几率小,使用难度低。...她有个想法是将某些信息可以通过 Feign 或者 RestTemplate 进行传递,天然友好的方式就是在拦截器中统一实现。...RestTemplateRequestInterceptor restTemplateRequestInterceptor() { return new RestTemplateRequestInterceptor(); } 两个拦截器都是实现框架自带的接口...另一种学习的方式就是鼓励大家去看一些框架的源码,特别在 Spring Cloud 这些框架中大量的自动配置,都有用到这些注解,我贴几个图给大家看看。 ? ?

    49730

    为了解决这个 RTT 过长的问题,我祭出了大招!

    大家好,我是坤哥 昨天这篇文章发出来后忘标原创了,所以重发一遍 今天给大家分享一个这两天排查成功的案例,相信对大家会有些帮助。...,今天我要分享的这个 case 就是个典型,废话不多说,进入正题。...看下请求是否依然缓慢,这里我两个方法都试了,用 Safari 也重现了 RTT 大于 3s 的情况,并且我用 curl 在终端请求也发现了 RTT 大于 3s 的情况,如何使用 curl 请求呢,这里提醒一下...可以看到请求需要经过反向代理层,接入层后才能到达我们的站点层(即我们的 Spring MVC 服务),也就是说从「反向代理层到接入层」及「接入层到站点层」都可能导致请求缓慢,于是我把我用 arthas...trace 执行的结果(MVC 服务执行时间 80ms 左右)与前端请求有 1/3 的概率超过 3s 的结论告诉了运维,让他们排查一下从反向代理层到站点层这中间是否有啥问题,不一会儿果然查出了问题。

    1.6K40

    我用python算出了同事的身份证号码!

    先看看李大伟的朋友圈中发的图片。 ? (该火车票来自其他平行世界,扫描可能发生奇怪现象) 车票中暴露的个人信息为: 3302211993****4914 李大伟 只缺少月份日期四位。...根据李大伟的身份证信息的前6位“330221” 轻易可得: ?...额 有33个都符合校验逻辑,这只筛掉了90%啊 这就尴尬了 如何在33个日期中挑出来李大伟的真实出生日期呢? 思考了一下 (其实是百度了一波) 这里需要我们每个人都用过的12306。 ?...最终可以测出李大伟的出生日期是:19930608 收工, 奶茶到手。 ---- ---- 大家是不是想知道我到底试了多少次才成功的? 刚刚回来的李大伟也表示很想知道。 其实一次也没用试。...现在我喝着李大伟买的奶茶 码着文 打开钉钉 看着李大伟的昵称 ? 心里笑出猪叫。 文中人物、身份证号码纯属虚构,如有雷同,就是抄我的。

    1.3K30

    我用python算出了同事的身份证号码!

    事情的经过是这样的: 我的同事李大伟最近出差去了。 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来。 估计是他想起了我朱小五从不打无把握之赌,后面就怂了。...先看看李大伟的朋友圈中发的图片。 (该火车票来自其他平行世界,扫描可能发生奇怪现象) 车票中暴露的个人信息为: 3302211993****4914 李大伟 只缺少月份日期四位。...科普时间: 根据李大伟的身份证信息的前6位“330221” 轻易可得: 浙江省宁波人,1993年滴 那我先用python生成1993年的所有日期吧 import time #生成出生当年所有日期...最终可以测出李大伟的出生日期是:19930608 收工, 奶茶到手。 ---- 大家是不是想知道我到底试了多少次才成功的? 刚刚回来的李大伟也表示很想知道。 其实一次也没用试。...现在我喝着李大伟买的奶茶 码着文 打开钉钉 看着李大伟的昵称 心里笑出猪叫。 文中人物、身份证号码纯属虚构,如有雷同,就是抄我的。

    54710

    忍受不了糟糕的工作氛围,我退出了 Google WebAssembly 团队

    过去二十年来,我饱受各种慢性病的折磨,好在同事们对我体贴有加,才让我勉强坚持下来。这里先给结论:Google 是我待过的最差的企业,而且这份工作经历给我的大脑造成了永久损伤。...到这里,WebAssembly 的改进流程已经基本定型:汲取 asm.js 优势的同时克服其弱点,再构建起一套能在现有 JavaScript 运行时上通过代码生成、调试和其他基础设施轻松实现的新规范。...最后,还是团队在孤立无援下全靠自己拼出了一条生路。 就这样,我平静地结束了自己的 Google 任职期。...现在我终于有所好转,也开始从开源贡献中赚取报酬。但无论如何,我再也不是当初那个健康活泼的我了。 希望我的这份避坑指南能给大家一点启示,也祝愿各位能够勇猛精进,探索出适合自己的职业道路。加油!...或许,在当下,比起技术实现、创新等难题,更值得大家思考的是如何治理好团队,平衡工作和“人”之间的矛盾,实现团队高效、稳定、可持续的发展。

    31710

    我用python算出了同事的身份证号码!

    文章转载自:凹凸玩数据,作者:朱小五 事情的经过是这样的: 我的同事李大伟最近出差去了。 昨晚睡觉前翻了翻朋友圈, 就跟他愉快地 互怼 交流了起来。 ?...估计是他想起了我朱小五从不打无把握之赌,后面就怂了。 一杯奶茶嘛,也可以接受, 像杰伦一样快乐就好啦。 开工。 先看看李大伟的朋友圈中发的图片。 ?...根据李大伟的身份证信息的前6位“330221” 轻易可得: ?...最终可以测出李大伟的出生日期是:19930608 收工, 奶茶到手。 ---- ---- 大家是不是想知道我到底试了多少次才成功的? 刚刚回来的李大伟也表示很想知道。 其实一次也没用试。...现在我喝着李大伟买的奶茶 码着文 打开钉钉 看着李大伟的昵称 ? 心里笑出猪叫。 文中人物、身份证号码纯属虚构,如有雷同,就是抄我的。

    1.4K60
    领券