安庆大理运城常德铜陵江西
投稿投诉
江西南阳
嘉兴昆明
铜陵滨州
广东西昌
常德梅州
兰州阳江
运城金华
广西萍乡
大理重庆
诸暨泉州
安庆南充
武汉辽宁

golang变相实现抽象类

9月1日 不星湖投稿
  golang里的struct只能有属性,interface只能有方法定义。这点在java里很好实现的abstractclass在这里就不能直接实现,可以通过struct和interface的结合定义,实现抽象类的类似的功能。
  直接上代码:
  代码都来之与项目
  GitHubgolangfotxxljobexecutor
  在这个项目里,重构了executor和默认的RestfulExecutor的实现方式,就是采用了上述的方式。
  先定义接口executor执行器typeexecutorinterface{Init初始化执行器Init(opts。。。Option)Run启动服务Run()errorRegistry注册执行器到调度中心Registry()UnRegistry从调度中心在注销执行器UnRegistry()errorSetLogHandler日志handlerSetLogHandler(handlerLogHandler)Stop停止服务Stop()RequestCallback执行后回调请求给调度中心RequestCallback(taskTask,codeint64,msgstring)RegTask注册任务RegTask(patternstring,taskTaskFunc)}
  然后定义我们需要的抽象类typeExecutorstruct{executorprivateoptsOptionsaddressstringregListtaskPool注册任务列表runListtaskPool正在执行任务列表loglog4go。LoggerlogHandlerLogHandler日志查询handlerinnerimplexecutor这里很关键,是实现抽象类的重要地方}这里很关键,是实现抽象类的重要地方,封装一个wrap方法,func(eExecutor)wrap(wrapexecutor){e。implwrap}
  实现抽象类里的主要方法func(eExecutor)Init(opts。。。Option){for,o:rangeopts{o(e。opts)}e。loge。opts。loggere。regListtaskPool{data:make(map〔string〕Task),}e。runListtaskPool{data:make(map〔string〕Task),}e。addresse。opts。ExecutorIp:e。opts。ExecutorPorte。log。Info(vv,EXECUTOR4GVERSION,e。address)goe。Registry()这里的Regstry是子类需要实现的方法}Registry注册执行器到调度中心func(eExecutor)Registry(){用wrap方式把调用交换具体的子类e。impl。Registry()}
  子类实现typeRestFulExecutorstruct{Executormusync。RWMutex}Registry注册执行器到调度中心func(eRestFulExecutor)Registry(){t:time。NewTimer(time。Second0)初始立即执行defert。Stop()。。。。}
  最关键的地方,调用funcnewExecutor(opts。。。Option)executor{varexecexecutoroptions:newOptions(opts。。。)ifoptions。executorImplnil{变相的抽象类的实现e:RestFulExecutor{}e。wrap(e)最关键的地方,使用wrap把具体实现子类包装进返回接口e。optsoptionsreturne}else{returnoptions。executorImpl}}
  具体代码可以查看项目中的源码
  项目地址
  GitHubgohutoolboot4goxxljobexecutor:golangfotxxljobexecutor
  推荐几个好工具GitHubgohutoolboot4go:abootstrapframeworkforgolanglikeasspringboot
  GitHubgohutoollog4go:alogkitlikeaslog4jwithgolanguagegolang里的日志工具log4go知乎
  golang中的表达式解析expression4go简单的EL知乎
投诉 评论 转载

8月新能源汽车分车型销量排行榜根据新车交强险数据显示:2021年8月新能源乘用车销量达到23。05万台,环比7月增长6。42,同比去年增长145。2,18月累计为144。62万台,同比去年增长196。9,呈……手机充电到100是好是坏?充前先插数据线or电源?手机充电小手机没电,生无可恋!手机刚买的时候电池电量可以维持一整天,但过了两三年,电池的续航能力就没有那么持久了。究竟哪些错误充电的习惯缩短了电池的寿……用智能手机拍下星星和月亮以及银河和国际空间站从银河系到国际空间站仅使用智能手机拍摄的天文照片一位只用智能手机拍下星星和月亮以及银河和国际空间站(ISS)的精彩天文摄影照片的英国男子颤抖着说他是一个完全的摄影业余爱好……阿里CEO张勇辞任微博董事阿里最成功的投资1月10日晚,(新浪)微博发布公告称,阿里巴巴董事局主席张勇已辞任微博公司董事,阿里巴巴集团首席市场官董本洪将接替其位置。在微博董事会中拥有一名董事席位,是阿里作为微博主……golang变相实现抽象类golang里的struct只能有属性,interface只能有方法定义。这点在java里很好实现的abstractclass在这里就不能直接实现,可以通过struct和int……抖音里好多卖手机靓号的,有买过的前辈吗,可行吗?这个问题我太有发言权了。首先告诉你一下,抖音卖的所有靓号不管89元或者到9000元的,成本全部都是2块钱!为什么这么便宜呢?因为是民营运营商,只要量大,2块钱成本就给你。……TCLS12金标剧院电视,刷新平价电视影音观感年前准备搬新家了,其他家具电器进场散味已经很久了,唯独为客厅打造什么样的视听装备一直迟迟不能做决定。选了一圈激光投影仪,一套配下来要不少钱,关键是在实体店感受了安桥音响,再听别……自带ECC纠错很强大!上手威刚DDR5内存【前言】不知道大家对ECC内存是什么看法,家里那台工作PC每天要运行12个小时以上,长时间在高负载下进行剪辑工作,一次蓝屏死机可能就要丢失不少关键数据。这里给不了解……新规来了,一部手机必须能用7年!苹果三星开什么玩笑?大家有没有想过,一部手机用7年会是什么结果?有人认为,手机迭代速度变慢,不失为一件好事,因为这样一来,厂商就有更多的时间来打磨产品,提高硬件和软件的品质。原本这只是一个设……3秒打印一张卷子,喵喵机家用学习打印机F1上手体验写在最前面:自从孩子开始上小学之后,打印试卷可以说就成了家长必做的任务,特别是快到考试时,老师几乎每天都会将一些模拟卷发到家长群里,名曰:有需要的同学可以自行打印进行练习……盘点近期3万左右的新能源小车,看看哪个是你喜欢的自从宏光mini上市,好多厂家都跟风推出自己的低价电动汽车,一批有颜值有能力的小车竞相上场,2021年新能源的微型车热力不减,这里就盘点一下最近的几个新能源的微型车,看看都有哪……9月新机扎堆亮相,五款旗舰机型即将发布,国产手机火力全开上半年手机圈的大战已经告一段落,不知道什么时候开始,上半年发旗舰机型。而下半年更是超级旗舰机。就比如在9月即将发布的iPhone13系列,以及众多的骁龙888plus机型都在下……
360安全卫士windows10电脑版你们有好看的手机壁纸吗?如何给头条里的视频作品配音?提倡移动支付不等于拒现金起步价33。5万的坦克500居然卖爆了?难道是人傻钱多嘛?四川美女学霸登全球峰会,创ampquot亚洲唯一ampquo估值12亿的煎饼摊,开奔驰送煎饼,四年烧完两个亿投资后倒闭关于造车华为公开表示我们不造车未来也不会投资任何车企特斯联将深度参与迪拜后世博特区智慧城市建设WinXP访问Win10打印机被拒绝访问的解决方法中国特斯拉取消6个月超级免费充电引荐奖励,美国也不例外华为的鸿蒙系统正式量产,向安卓开了一枪?

友情链接:中准网聚热点快百科快传网快生活快软网快好知文好找七猫云易事利