首页 后端开发 Golang GO——项目结构

GO——项目结构

Jul 17, 2024 am 03:41 AM

我从今年(2022 年)开始真正使用 Golang 进行编程,我立即做的事情就是寻找参考资料,以了解改进项目结构的最佳方式。这篇文章只是讨论同一主题的许多其他文章之一,也许这就是我决定写它的原因。

首先,golang 在处理文件夹/包的方式上已经非常不同,而且,为了改进,它有一个非常固执己见的本质,许多官方文档告诉我们做某事的“goway”方式是什么(完整)然而,在你组织文件和文件夹的方式中,并没有真正的方向,所以每个人都对这部分给出了自己对世界的解释。

我将把这篇文章分成 3 个参考文献,然后展示这些参考文献的混合在项目中的效果。

第一个参考

一个有效的复杂系统总是从一个有效的简单系统演变而来。
-- 加尔定律

对于小型应用程序,项目结构应该简单。

Imagem para um projeto simples com tudo na raiz


https://innovation.enova.com/gophercon-2018-how-do-you-struct-your-go-apps/

第二参考

“社区”对 Go 生态系统中常见的一组历史和新兴设计布局模式进行了调查。这次调查中有很多很酷的东西,但引起我注意的是 /cmd 和 /internal 文件夹。

/命令

该项目的主要应用。
每个应用程序的目录名称必须与您想要的可执行文件的名称匹配(例如 /cmd/myapp)。

/内部的

私人应用程序和库代码。您不希望其他人将这些代码导入到他们的应用程序或库中。请注意,这种布局模式是由 Go 编译器本身强加的。

第三参考

能够更好地将“细节”与实际提供价值分开的架构。

GO — Estrutura de projetos


结果

对于一个简单的应用程序,我尝试保持简单,但是,当范围变大一点时,我尝试稍微区分什么是“核心”/域和什么是细节/基础设施。

GO — Estrutura de projetos


请注意,在 cmd 中,我没有 tuttipet 文件夹,正如参考项目所建议的那样。起初我尝试使用建议的模式,但由于这个 API 已经推出了命令行界面和 terraform 提供程序,我决定保留这种方式。

GO — Estrutura de projetos


快速放大核心。我在这里尝试简单化,不创建文件夹。我只与外部世界保持 1 个接触点(main.go),凡是概括的都有自己的文件,凡是不概括的都保留在其上下文中,简单。

GO — Estrutura de projetos


使用 tuttipet.New(简短、简洁且令人回味),“脏”层可以与用例交互(我发现用例这个词比交互器更容易理解)

GO — Estrutura de projetos


快速放大细节。以下是该领域取得成功的简单工具。

结论

在 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中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Go语言包导入:带下划线和不带下划线的区别是什么? Go语言包导入:带下划线和不带下划线的区别是什么? Mar 03, 2025 pm 05:17 PM

Go语言包导入:带下划线和不带下划线的区别是什么?

Beego框架中NewFlash()函数如何实现页面间短暂信息传递? Beego框架中NewFlash()函数如何实现页面间短暂信息传递? Mar 03, 2025 pm 05:22 PM

Beego框架中NewFlash()函数如何实现页面间短暂信息传递?

如何编写模拟对象和存根以进行测试? 如何编写模拟对象和存根以进行测试? Mar 10, 2025 pm 05:38 PM

如何编写模拟对象和存根以进行测试?

如何使用跟踪工具了解GO应用程序的执行流? 如何使用跟踪工具了解GO应用程序的执行流? Mar 10, 2025 pm 05:36 PM

如何使用跟踪工具了解GO应用程序的执行流?

Go语言中如何将MySQL查询结果List转换为自定义结构体切片? Go语言中如何将MySQL查询结果List转换为自定义结构体切片? Mar 03, 2025 pm 05:18 PM

Go语言中如何将MySQL查询结果List转换为自定义结构体切片?

如何定义GO中仿制药的自定义类型约束? 如何定义GO中仿制药的自定义类型约束? Mar 10, 2025 pm 03:20 PM

如何定义GO中仿制药的自定义类型约束?

Go语言如何便捷地写入文件? Go语言如何便捷地写入文件? Mar 03, 2025 pm 05:15 PM

Go语言如何便捷地写入文件?

如何编写基准,以准确反映GO中的现实世界表现? 如何编写基准,以准确反映GO中的现实世界表现? Mar 10, 2025 pm 05:36 PM

如何编写基准,以准确反映GO中的现实世界表现?

See all articles