重构项目中的库?重构数据库?最近发现 job[1] 有很多 clone。这个写了快一年的项目当时的目的是为了做压力测试。现在回看整个项目与代码都存在太多的冗余,所以做了一下重构。重构之后的项目,全部代码也就 80 行左右。所以,也就借着这次重构,向大家介绍一下,这个压箱底的库 routine[4]. 这个库自从写出来以后,基本上我所有的 Go 项目都会使用。当然,job 项目中还用到了,我封装的另外一个库 cmd[5],通过这个库可以快速的实现一个命令行程序。
以下文章来自慢舟,由慢舟撰写。
最近,人们发现job[1]有许多克隆。这个写了快一年的项目,目的是做一个压力测试。
现在回过头来看,整个项目和代码之间有太多的冗余,于是我做了一些重构。重构项目后,整个代码大概80行。
主要功能已经在routine[2]中实现了,job[3]实际上只是一个简单的组装。
所以,通过这次重构,我想给大家介绍一下壁橱底层的库例程[4]。这个库自从写出来以后,基本上我所有的Go项目都在用。
套路做了什么?
为什么要写这么基础的库?
每个程序都是从主函数开始的,但是整个程序的功能实现不会放在主函数中。而是通过层层功能的抽象和封装,最终,主功能只提供功能性功能的入口。所以,当我们看很多大型程序的时候,其实主函数很简单。
但是,即使主函数变得越来越简单,一些必要的函数也是逃不掉的。比如程序启动参数,程序信号处理,这些通常放在主函数中进行处理。
除了上面对主函数本身的处理,我发现在程序中定义线程,也就是在主函数中定义固定Go协处理器的入口,可以帮助维护人员更快的理解应用的逻辑实现。
所以我写了这样一个基础库,我只需要实现具体的函数作为Executor接口的实现。它是这样工作的:
常规协同控制
很多初学Go语言的开发者在控制过程中经常会犯以下错误:
提供简单协调控制的基本库,可以避免类似的错误。
整个套路的协同逻辑可以通过下图简单演示。
常规执行器
例程库不仅提供了一个主函数和协同进程控制的基本框架,还提供了许多功能函数的执行器。包括:
重试执行
重复执行repeat。
计划执行crontab
并发执行。
等等,很多功能包。
例行程序执行工作。
所以有了例程库,重构作业函数就很简单了,真的只是简单的汇编代码。
看一看,job的核心代码是3360。
当然,我打包的另一个库cmd[5]也用在了job项目中。通过这个库,可以快速实现命令行程序。感兴趣的同学不妨参考一下。
参考数据
[1]
job : https://github.com/liujianping/job
[2]
路线: https://github.com/x-mod/routine
[3]
job : https://github.com/liujianping/job
[4]
路线: https://github.com/x-mod/routine
[5]
cmd : https://github.com/x-mod/cmd
本文来自网络,不代表「专升本要什么条件_专升本要几年_成人高考专升本_山东专升本信息网」立场,转载请注明出处:http://www.sdzsb8.cn/zsxx/31458.html