标准Go项目的基本布局

前言

最近在工作中发现,项目的代码量在不断地增长,如果都挤在一个文件里阅读性就太差了,良好的目录与文件结构十分重要,尤其是团队合作的时候,良好的目录与文件结构可以减少很多不必要的麻烦,本文对Go项目的结构进行了一些总结,讲述通用的Go应用程序项目的一个基本布局。

Go目录

  • /cmd
    这是项目的主干部分。每个应用程序的目录名应该与想要的可执行文件的名称相匹配(如/cmd/myapp
    注意:这个目录中不要放置太多的代码,通常是有一个小的main函数,从别的目录导入代码或者调用代码。
  • /internal
    私有应用程序和库代码。可以选择在internal包中添加一些额外的结构,来分割共享和非共享的内部代码。
  • /pkg
    外部应用程序可以使用的库代码。
  • vendor
    应用程序依赖项,如新的内置Go Modules功能。可以使用go mod vendor命令创建/vendor目录。
    注意:如果未使用默认情况下处于启用状态的 Go 1.14,则可能需要在go build命令中添加-mod=vendor标志。

服务应用程序目录

  • /api
    OpenAPI/Swagger 规范,JSON 模式文件

Web应用程序目录

  • /web
    特定于 Web 应用程序的组件:静态 Web 资产、服务器端模板和 SPAs。

通用应用目录

  • /configs
    配置文件模板或默认配置。
  • /init
    System init(systemd,upstart,sysv)和 process manager/supervisor(runit,supervisor)配置。
  • /scripts
    执行各种构建、安装、分析等操作的脚本。
  • /build
    打包和持续集成。
  • /deployments
    IaaS、PaaS、系统和容器编配部署配置和模板(docker-compose、kubernetes/helm、mesos、terraform、bosh)。
  • /test
    额外的外部测试应用程序和测试数据。

其他目录

  • /docs
    设计和用户文档(除了 godoc 生成的文档之外)
  • /tools
    这个项目的支持工具。注意,这些工具可以从 /pkg/internal 目录导入代码。
  • /examples
    应用程序和/或公共库的示例。
  • /third_party
    外部辅助工具,分叉代码和其他第三方工具。
  • /githooks
    Git hooks。
  • /assets
    与存储库一起使用的其他资产(图像等)
  • /website
    如果不使用 Github 页面,则在这里放置项目的网站数据。

不应该拥有的目录

  • /src
    有些 Go 项目确实有一个src文件夹,但这通常发生在开发人员有 Java 背景,在Java中它是一种常见的模式。如果可以的话,尽量不要采用这种 Java 模式。

参考:https://github.com/golang-standards/project-layout
本文是一个简短的总结,如果还有细节上不太明白的地方,可以去这个网站上多看看研究研究。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值