聊一聊Go中面向包的设计

318次阅读  |  发布于3年以前

目录

前言

文章翻译自:https://github.com/ardanlabs/gotraining/tree/master/topics/go/design/packaging,属于由于gotraining系列的design/packaging篇,本人翻译水平,觉得翻译不当之处烦请指出。谢谢。

面向包的设计允许开发人员确定一个包在Go项目中的位置,并且该包必须遵守设计准则。它定义了什么是Go项目以及Go项目是如何构建起来的。最后,它增强了团队成员之间的沟通交流,促进了整洁的包设计和项目架构。

链接

可以参考阅读下面文章

包设计理念

面向包设计

历史

在2000年 Mihai Budiu 对 Brian Kernighan 的采访中,Brian 被问到以下问题:

“Can you tell us about the worse features of C, from your point of view”?

“从你的角度来看,你能告诉我们 c 语言最糟糕的特性是什么吗?”?

以下是Brian的回答:

I think that the real problem with C is that it doesn’t give you enough mechanisms for structuring really big programs, for creating "firewalls" within programs so you can keep the various pieces apart. It’s not that you can’t do all of these things, that you can’t simulate object-oriented programming or other methodology you want in C. You can simulate it, but the compiler, the language itself isn’t giving you any help.”

我认为 c 语言的真正问题在于它没有提供足够的机制来构造真正的大型程序,在程序中创建“防火墙”,这样就可以将各个部分分开。并不是说你不能做所有这些事情,也不是说你不能在 c 语言中模拟面向对象程序设计或者其他你想要的方法。你可以模拟它,但是编译器,语言本身不会给你任何帮助。

语言机制

包的设计哲学

项目结构

Kit                     Application

├── CONTRIBUTORS        ├── cmd/
├── LICENSE             ├── internal/
├── README.md           │   └── platform/
├── cfg/                └── vendor/
├── examples/
├── log/
├── pool/
├── tcp/
├── timezone/
├── udp/
└── web/

验证

面向包设计的一个重要方面是去验证包设计的能力。这是可能的,因为根据包在项目中的位置与包相关联的准则。有七个验证步骤可帮助你识别设计问题。

验证包的位置

验证依赖项

验证正在实施的策略

验证接受/返回数据的方式

验证如何处理错误

验证测试

验证recover和panic

参考资料

[1] Design Philosophy On Packaging: https://www.ardanlabs.com/blog/2017/02/design-philosophy-on-packaging.html

[2] Package Oriented Design: https://www.ardanlabs.com/blog/2017/02/package-oriented-design.html

[3] Understanding and using the vendor folder: https://blog.gopheracademy.com/advent-2015/vendor-folder/

Copyright© 2013-2020

All Rights Reserved 京ICP备2023019179号-8