我从今年(2022 年)开始真正使用 Golang 进行编程,我立即做的事情就是寻找参考资料,以了解改进项目结构的最佳方式。这篇文章只是讨论同一主题的许多其他文章之一,也许这就是我决定写它的原因。
首先,golang 在处理文件夹/包的方式上已经非常不同,而且,为了改进,它有一个非常固执己见的本质,许多官方文档告诉我们做某事的“goway”方式是什么(完整)然而,在你组织文件和文件夹的方式中,并没有真正的方向,所以每个人都对这部分给出了自己对世界的解释。
我将把这篇文章分成 3 个参考文献,然后展示这些参考文献的混合在项目中的效果。
一个有效的复杂系统总是从一个有效的简单系统演变而来。
-- 加尔定律
对于小型应用程序,项目结构应该简单。
“社区”对 Go 生态系统中常见的一组历史和新兴设计布局模式进行了调查。这次调查中有很多很酷的东西,但引起我注意的是 /cmd 和 /internal 文件夹。
该项目的主要应用。
每个应用程序的目录名称必须与您想要的可执行文件的名称匹配(例如 /cmd/myapp)。
私人应用程序和库代码。您不希望其他人将这些代码导入到他们的应用程序或库中。请注意,这种布局模式是由 Go 编译器本身强加的。
能够更好地将“细节”与实际提供价值分开的架构。
对于一个简单的应用程序,我尝试保持简单,但是,当范围变大一点时,我尝试稍微区分什么是“核心”/域和什么是细节/基础设施。
请注意,在 cmd 中,我没有 tuttipet 文件夹,正如参考项目所建议的那样。起初我尝试使用建议的模式,但由于这个 API 已经推出了命令行界面和 terraform 提供程序,我决定保留这种方式。
快速放大核心。我在这里尝试简单化,不创建文件夹。我只与外部世界保持 1 个接触点(main.go),凡是概括的都有自己的文件,凡是不概括的都保留在其上下文中,简单。
使用 tuttipet.New(简短、简洁且令人回味),“脏”层可以与用例交互(我发现用例这个词比交互器更容易理解)
快速放大细节。以下是该领域取得成功的简单工具。
在 Golang 提供的道路上我还是个孩子,仍在弄清楚可以用它做什么,但是,尽管我不喜欢 Go 做某些事情的方式,但事实证明它非常简单且坚固耐用。
总结,尽可能保持简单,如果它变得太复杂......我会回到绘图板。
https://dev.to/booscaaa/implementando-clean-architecture-com-golang-4n0a
https://github.com/golang-standards/project-layout
https://blog.boot.dev/golang/golang-project-struct/
https://github.com/bnkamalesh/goapp
https://www.wolfe.id.au/2020/03/10/how-do-i-struct-my-go-project/
https://blog.logrocket.com/flat-struct-vs-layered-architecture-structuring-your-go-app/
https://developer20.com/how-to-struct-go-code/
https://dev.to/jinxankit/go-project-struct-and-guidelines-4ccm
https://github.com/bxcodec/go-clean-arch
https://golangexample.com/example-go-clean-architecture-folder-pattern/
https://www.calhoun.io/flat-application-struct/
https://go.dev/doc/ effective_go#names
https://go.dev/blog/package-names
原帖:https://medium.com/@espigah/go-layout-do-projeto-18aacce8089d
以上是GO——项目结构的详细内容。更多信息请关注PHP中文网其他相关文章!