手把手带你写一个 Web 框架
叶剑峰
腾讯高级工程师,前滴滴技术专家
22731 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 42 讲
特别放送 (1讲)
手把手带你写一个 Web 框架
15
15
1.0x
00:00/00:00
登录|注册

21|自动化(上):DRY,如何自动化一切重复性劳动?

new
list
command
list
new
provider
替换关键词
删除不必要的文件
使用go-git下载
参数获取
New命令
List命令
二级命令
一级命令
New命令
List命令
二级命令
一级命令
自动化中间件迁移工具
自动化创建命令行工具
自动化创建服务工具
不重复自己
傲慢
急躁
懒惰
实现步骤
迁移命令
实现
创建命令
实现
创建命令
服务提供者
自动化重复性劳动
优秀程序员的美德
DRY
自动化中间件迁移工具
自动化创建命令行工具
自动化创建服务工具
自动化

该思维导图由 AI 生成,仅供参考

你好,我是轩脉刃。
不知道你有没有听过这种说法,优秀程序员应该有三大美德:懒惰、急躁和傲慢,这句话是 Perl 语言的发明者 Larry Wall 说的。其中懒惰这一点指的就是,程序员为了懒惰,不重复做同样的事情,会思考是否能把一切重复性的劳动自动化(don’t repeat yourself)。
而框架开发到这里,我们也需要思考,有哪些重复性劳动可以自动化么?
从第十章到现在我们一直在说,框架核心是服务提供者,在开发具体应用时,一定会有很多需求要创建各种各样的服务,毕竟“一切皆服务”;而每次创建服务的时候,我们都需要至少编写三个文件,服务接口、服务提供者、服务实例。如果能自动生成三个文件,提供一个“自动化创建服务的工具”,应该能节省不少的操作
说到创建工具,我们经常需要为了一个事情而创建一个命令行工具,而每次创建命令行工具,也都需要创建固定的 Command.go 文件,其中有固定的 Command 结构,这些代码我们能不能偷个懒,“自动化创建命令行工具”呢?
另外之前我们做过几次中间件的迁移,先将源码拷贝复制,再修改对应的 Gin 路径,这个操作也是颇为繁琐的。那么,我们是否可以写一个“自动化中间件迁移工具”,一个命令自动复制和替换呢?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何利用命令行交互和模板创建自动化工具,以减少重复性劳动。作者强调了优秀程序员应具备的“懒惰”美德,即思考如何将重复性劳动自动化。文章详细介绍了通过cobra框架创建命令行工具,以及使用模板和交互实现自动化服务创建的过程。重点解释了交互式命令行工具的实现方式,以及如何使用模板创建文件并填充内容。通过这些自动化工具的实现,读者可以更高效地进行服务创建、命令行工具创建和中间件迁移,从而节省开发时间。此外,文章还介绍了自动化中间件迁移工具的实现逻辑,为读者提供了实用的技术指导。整体而言,本文深入浅出地介绍了如何利用命令行工具和模板创建自动化工具,为读者提供了实用的技术指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《手把手带你写一个 Web 框架》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(4)

  • 最新
  • 精选
  • zzq
    大佬, 在 framework/command/middleware.go 文件中缺少了 默认: 同中间件名称。 if folder == "" {folder = name}

    作者回复: 感谢,github已经更新,也合并到hade的master上了

    2021-12-01
  • kkxue
    课程设计的好棒
    2021-11-05
    3
  • qinsi
    中间件也要拷贝代码吗...是否可以安装以后在go.mod里replace呢?
    2021-11-05
    1
    1
  • taoist
    go-git 配置http代理: res_url := "https://github.com/gin-contrib/" + repo + ".git" fmt.Println("下载中间件 gin-contrib:", res_url) //自定义 http proxy proxy_url, _ := url.Parse("http://127.0.0.1:7890") customHttp := &http.Client{ Transport: &http.Transport{ Proxy: http.ProxyURL(proxy_url), }, } client.InstallProtocol("https", githttp.NewClient(customHttp)) _, err := git.PlainClone(path.Join(middlewarePath, repo), false, &git.CloneOptions{ URL: res_url, Progress: os.Stdout, })
    2024-01-20归属地:山东
收起评论
显示
设置
留言
4
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部