这个项目能做什么
本仓库提供了一套Go应用中常用的历史及新兴项目布局模式。它并非Go核心团队定义的官方标准,而是社区共同努力记录Go生态系统中观察到的约定俗成的规范。
该布局定义了以下关键目录:
- /cmd:主应用程序;每个子目录对应一个可执行文件名,包含从/internal和/pkg导入代码的最小main函数。
- /internal:私有应用程序和库代码,自Go 1.4起由Go编译器强制实施以防止外部导入。可嵌套在任意层级。
- /pkg:面向外部使用的库代码。表明其他用户可以安全地导入这些代码,虽然/internal是编译器强制实施的私有包替代方案。
- /vendor:通过Go Modules(go mod vendor)管理的应用依赖。
- /api:OpenAPI/Swagger规范、JSON schema文件、协议定义。
- /web:静态Web资源、服务端模板、SPA应用。
- /configs:配置文件模板或默认配置。
- /init:系统初始化(systemd、upstart、sysv)和进程管理器配置。
- /scripts:构建、安装、分析脚本,以保持根目录Makefile简洁。
- /build:打包(AMI、Docker、deb、rpm)和CI配置。
- /deployments:IaaS/PaaS、容器编排部署配置(docker-compose、kubernetes/helm、terraform)。
- /test:额外的外部测试应用和测试数据。
- /docs、/tools、/examples、/third_party、/githooks、/assets、/website:用于文档、工具、示例、外部辅助工具、git钩子、资源和网站数据的支撑目录。
README明确建议避免使用/src目录(Java惯例),并推荐小型项目或概念验证从简单开始(单个main.go和go.mod),随着项目增长再采用更多结构。推荐使用Go Modules(自Go 1.14起已投入生产)、gofmt以及staticcheck进行格式化和代码检查。README支持18种以上语言,包括中文、日文、韩文、法文、西班牙文、俄文、印地文、孟加拉文等。
评论
0 评分人数达到10人后显示
登录后参与讨论。