标准的Go项目布局
Go 目录
/cmd 项目的主干
每个应用程序的目录名应该与你想要的可执行文件的名称相匹配(例如,/cmd/myapp)。
不要在这个目录中放置太多代码。如果你认为代码可以导入并在其他项目中使用,那么它应该位于 /pkg 目录中。如果代码不是可重用的,或者你不希望其他人重用它,请将该代码放到 /internal 目录中。你会惊讶于别人会怎么做,所以要明确你的意图!
通常有一个小的 main 函数,从 /internal 和 /pkg 目录导入和调用代码,除此之外没有别的东西。
有关示例,请参阅 /cmd 目录。
/internal
私有应用程序和库代码,你的实际应用程序代码可以放在 /internal/app 目录下(例如 /internal/app/myapp),这些应用程序共享的代码可以放在 /internal/pkg 目录下(例如 /internal/pkg/myprivlib)。
/pkg
外部应用程序可以使用的库代码(例如 /pkg/mypubliclib)。其他项目会导入这些库,希望它们能正常工作,所以在这里放东西之前要三思:-)注意,internal 目录是确保私有包不可导入的更好方法,因为它是由 Go 强制执行的。/pkg 目录仍然是一种很好的方式,可以显式地表示该目录中的代码对于其他人来说是安全使用的好方法。
/vendor
应用程序依赖项(手动管理或使用你喜欢的依赖项管理工具,如新的内置 Go Modules 功能)。go mod vendor 命令将为你创建 /vendor 目录。
服务应用程序目录
/api
OpenAPI/Swagger 规范,JSON 模式文件,协议定义文件。
有关示例,请参见 /api 目录。
Web 应用程序目录
/web
特定于 Web 应用程序的组件:静态 Web 资产、服务器端模板和 SPAs。
通用应用目录
/configs
配置文件模板或默认配置。
将你的 confd 或 consul-template 模板文件放在这里。
/init
System init(systemd,upstart,sysv)和 process manager/supervisor(runit,supervisor)配置。
/scripts
执行各种构建、安装、分析等操作的脚本。
/build
打包和持续集成。将你的云( AMI )、容器( Docker )、操作系统( deb、rpm、pkg )包配置和脚本放在 /build/package 目录下。
/deployments
IaaS、PaaS、系统和容器编排部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。注意,在一些存储库中(特别是使用 kubernetes 部署的应用程序),这个目录被称为 /deploy。
/test
额外的外部测试应用程序和测试数据。你可以随时根据需求构造 /test 目录。
其他目录
/docs
设计和用户文档(除了 godoc 生成的文档之外)。
/tools
这个项目的支持工具。注意,这些工具可以从 /pkg 和 /internal 目录导入代码。
/examples
你的应用程序和/或公共库的示例。
/third_party
外部辅助工具,分叉代码和其他第三方工具(例如 Swagger UI)。
/githooks
Git hooks。
/assets
与存储库一起使用的其他资产(图像、徽标等)。
/website
如果你不使用 Github 页面,则在这里放置项目的网站数据。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: