TonyBai · Go 语言进阶课
Tony Bai
资深架构师
925 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已更新 16 讲/共 35 讲
模块二 · 设计先行,奠定高质量代码基础 (2讲)
TonyBai · Go 语言进阶课
15
15
1.0x
00:00/00:00
登录|注册

15 | 包设计:如何实践高内聚、低耦合与SOLID原则?

你好!我是 Tony Bai。
上一节课我们讨论了宏观的项目布局,为代码找到了安放的“社区”和“街道”。但仅仅有好的布局还不够,项目的真正活力来自于构成它的基本单元——包(package)。可以说,Go 应用的本质就是一组设计良好、协同工作的包的集合。如何设计出职责清晰、依赖合理、易于维护的包,是衡量 Go 代码质量的关键,也是我们设计先行模块的核心议题。
你可能会问:
Go 的包在设计中到底扮演什么角色?仅仅是代码的容器吗?
人人都说“高内聚、低耦合”,在 Go 包设计中,这具体怎么落地?
经典的 SOLID 设计原则,对于没有继承、推崇组合的 Go,还有效吗?如何用 Go 的方式实践它们?
有哪些常见的包设计“陷阱”或“反模式”是我们必须警惕和避免的?
不理解 Go 包设计的核心原则,可能会让我们创建出职责混乱、依赖纠缠、难以测试和扩展的“意大利面条式”代码。掌握良好的包设计实践,是编写出地道、可维护、高质量 Go 代码的必经之路。
这节课,我们就来深入探讨 Go 包设计的艺术与科学。在我们深入包设计原则之前,我们先来重新认识 Go 包。

Go 包的认知:基本的功能、编译和设计单元

我们知道 Go 包是 Go 编程语言中的一个重要概念,它是一组相关的 Go 源代码文件。并且,在 Go 中,每个 Go 源文件都必须属于一个包。但 Go 包又不仅仅是一个存放.go文件的目录,它在 Go 语言中承载着多重关键角色。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
  • 解释
  • 总结

1. Go包是Go应用的基本功能单元,用于划分功能和职责边界,提供封装和代码复用的便利。 2. Go包是编译时的最小单位,以包为单位进行编译,有助于提高编译效率和管理依赖关系。 3. 高内聚、低耦合原则适用于Go包设计,功能应自然结合到一个包中,保证包的内聚性,好的包名是内聚性的关键信号。 4. Go包之间的耦合关系应尽可能降低,Go强制要求不能存在循环依赖,包间耦合应该是有向无环的。 5. SOLID原则在Go包设计中具有重要指导意义,包括单一职责原则、开放-关闭原则、里氏替换原则、接口隔离原则和依赖倒置原则。 6. 包名的重要性,它可以理解为一个包的API的重要组成部分,因此包设计的第一步就是要为包起个好名字。 7. 包应该只导出那些确实需要被外部使用的类型、函数、常量和变量,所有仅供包内部使用的辅助类型、函数或状态,都应该保持非导出。 8. 避免包级状态,尽量将状态封装在结构体中,并通过函数参数或方法接收者来传递。 9. 接口定义通常应靠近消费者,即,如果包A需要包B提供的某种能力,那么定义这个能力的接口最好放在包A中,然后让包B实现它。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《TonyBai · Go 语言进阶课》
新⼈⾸单¥59
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部