Go 语言项目开发实战
孔令飞
腾讯云专家工程师,前 Red Hat、联想云工程师
41030 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 61 讲
Go 语言项目开发实战
15
15
1.0x
00:00/00:00
登录|注册

10 | 设计方法:怎么写出优雅的 Go 项目?

按功能拆分
按层拆分
设计文档
API接口文档
使用文档
开发文档
安装文档
README.md
面向“对象”编程
面向接口编程
Code Review
提高单元测试覆盖率
单元测试
遵循最佳实践
符合Go编码规范
选择好的模块拆分方法
组织合理的目录结构
2. 接口化的代码,面向接口的编程
1. 方法帮助开发优雅的Go项目
完善的文档
对接CI/CD
借助工具
自动生成代码
使用Makefile管理项目
制定高效的开发流程
编程哲学
代码质量
代码规范
代码结构
用“最佳实践”的方式实现Go应用、项目管理和项目文档
高代码质量
易测试、易扩展
易阅读、易理解、易维护
符合Go编码规范和最佳实践
Go项目包含Go应用、项目管理和项目文档
课后练习
编写高质量的项目文档
高效管理项目
编写高质量的Go应用
如何写出优雅的Go项目?
一个优雅的Go项目的特点
为什么是Go项目,而不是Go应用?
编写优雅的Go项目

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

你好,我是孔令飞,今天我们来聊聊如何写出优雅的 Go 项目。
Go 语言简单易学,对于大部分开发者来说,编写可运行的代码并不是一件难事,但如果想真正成为 Go 编程高手,你需要花很多精力去研究 Go 的编程哲学。
在我的 Go 开发生涯中,我见过各种各样的代码问题,例如:代码不规范,难以阅读;函数共享性差,代码重复率高;不是面向接口编程,代码扩展性差,代码不可测;代码质量低下。究其原因,是因为这些代码的开发者很少花时间去认真研究如何开发一个优雅的 Go 项目,更多时间是埋头在需求开发中
如果你也遇到过以上问题,那么是时候花点时间来研究下如何开发一个优雅的 Go 项目了。只有这样,你才能区别于绝大部分的 Go 开发者,从而在职场上建立自己的核心竞争力,并最终脱颖而出。
其实,我们之前所学的各种规范设计,也都是为了写出一个优雅的 Go 项目。在这一讲,我又补充了一些内容,从而形成了一套“写出优雅 Go 项目”的方法论。这一讲内容比较多,但很重要,希望你能花点精力认真掌握,掌握之后,能够确保你开发出一个优秀的 Go 项目。

如何写出优雅的 Go 项目?

那么,如何写出一个优雅Go 项目呢?在回答这个问题之前,我们先来看另外两个问题:
为什么是 Go 项目,而不是 Go 应用?
一个优雅的 Go 项目具有哪些特点?
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何编写优雅的Go语言项目,包括代码质量保障、面向接口编程和面向对象编程在Go语言中的应用,以及自动生成代码、借助工具和对接CI/CD等方面的方法。文章强调了高效的开发流程和项目管理的重要性,以及编写高质量的项目文档的必要性。通过合理的代码结构、规范的代码、保证代码质量以及编程哲学和软件设计方法,读者可以提高Go项目的质量和可维护性。同时,文章还提供了一些实用的工具和方法,如Makefile管理项目、自动生成代码、借助工具和对接CI/CD流程等,以帮助读者全面了解如何编写高质量的Go应用,并提高项目管理的效率。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Go 语言项目开发实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(28)

  • 最新
  • 精选
  • 💎A
    https://readme.so/editor readme模板

    作者回复: 好网站,感谢分享!

    2021-06-18
    8
    22
  • aoe
    推荐 Copilot 人工智能插件,写起代码一路火花带闪电,自动生成的代码有时让人震惊

    作者回复: 666

    2022-03-10
    8
    11
  • 莫林
    谢谢老师详细的讲解。关于目录结构有两点比较疑惑: 1. 按功能拆分的时候,如果两个功能模块需要相互调用怎么办?例如 User、Article 和 Comment. 2. 每个功能模块里面是不是也要按照分层来:domain、repository 、service? 3. 对于公共组件,如 mysql 连接池。需要如何处理,在何时注入。起 server 的时候注入 context 还是在每个repository 里引用? 希望老师有空能帮忙解答,谢谢~

    作者回复: 1. 2个模块相互调用,那就会出现循环,可以把功能独立到一个新包,User、Article、Comment都导入新包。 2. domain、repository、service是整个项目的软件架构,每个功能模块不需要按这么来分。 3. 把所有的跟数据库操作都封装在repository中,然后再repository中引用

    2021-07-21
    2
    8
  • daz2yy
    很完善的内容!不过,道理其实都懂,或者多多少少看过一些,如果能结合一些实际落地的例子就更好了;也正如老师说的,要求人去按照规范做很难,需要靠工具实现约束;还有比如 CR 的具体操作细节,花费的时间,参与人,CR不通过与通过的情况等。

    作者回复: 项目中会有实战那俩

    2021-06-16
    6
  • Sch0ng
    给出了优雅go项目的定义和实现路径,无异于茫茫大海中的指路明灯。 灯塔有了,下一步就是朝着希望的方向慢慢积累徐徐前进。

    作者回复: 老哥,语文作文一定是高分!

    2021-08-06
    2
    3
  • 狮盔银甲
    关于项目架构 相比 老师介绍的 按层拆分(水平拆分)和按功能拆分(垂直拆分) 在 <<clean architecture>> 和 领域驱动设计 是不是都推荐六边形架构呢 在这块比较疑惑

    作者回复: 按功能拆分和六边形架构不冲突。看了下六边形架构介绍,很cool,IAM项目也有六边形架构的影子,老哥完全可以按六边形架构来设计系统。

    2021-07-15
    2
    3
  • timidsmile
    代码结构这一小节,有点不太理解,求指点~~~ 1. 目录结构和分层是二选一吗?还是先按照【目录结构】规范,然后在具体的目录下再按照【分层】来实现呢? 2. 分层建议按功能拆分,那么一个功能模块里还需要考虑分层吗?比如订单模块,里面会包含业务逻辑,db、api、redis调用,这些都放到一个模块里需要考虑分层吗?

    作者回复: 需要按功能拆分,而非分层

    2021-06-29
    2
  • yandongxiao
    总结: 1. Go 项目和Go应用的区别? 项目还包括项目管理和项目文档。 2. 如何编写高质量的Go应用? 1. 代码结构:按照功能对项目进行模块划分; 2. 编码规范:Uber 编码规范 + 静态代码检查 + Code Review + CI 检查; 3. 代码质量:单元测试 + Code Review 4. 编程哲学:面向接口编程、面向对象变成 5. 软件设计方法:设计模式 + SOLID 原则 3. 如何高效地管理项目?根据第8节,在开发阶段和测试阶段描述的子任务,通过 makefile 、bash 以及众多工具将它们管理起来。 4. 如何编写高质量的文档? 参见第4节。

    作者回复: 总结的好细呀,66666666

    2021-11-24
    1
  • 
    想问问像 changelog 的生成是以为个 维度划分?如 日期?分支提交,还是以功能发布为准?

    作者回复: 以版本发布为准

    2021-06-22
    1
  • demon
    你好,请问单元测试文件应该放在哪个文件夹下?

    作者回复: 建议跟源码文件放一个目录中

    2021-06-21
    2
    1
收起评论
显示
设置
留言
28
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部