这是Go应用程序项目的基本布局。它不是核心Go开发团队定义的官方标准; 然而,它是Go生态系统中一组常见的历史和新兴项目布局模式。其中一些模式比其他模式更受欢迎。它还有许多小的增强功能以​​及任何足够大的真实世界应用程序共有的几个支持目录。

main.gointernalvendor

此项目布局是有意通用的,它不会尝试强加特定的Go包结构。

这是社区的努力。如果您看到新模式或者您认为某个现有模式需要更新,请打开一个问题。

gofmtgolint
Go Project Layout

有关命名和组织包以及其他代码结构建议的更多信息:

目录

/cmd

该项目的主要应用。

/cmd/myapp
/pkg/internal
main/internal/pkg
/cmd
/internal

私有应用程序和库代码。这是您不希望其他人在其应用程序或库中导入的代码。

/internal/app/internal/app/myapp/internal/pkg/internal/pkg/myprivlib
/pkg
/pkg/mypubliclib
Best Practices for Industrial Programming
/pkg
/vendor
dep

如果要构建库,请不要提交应用程序依赖项。

服务应用程序目录

/api

OpenAPI / Swagger规范,JSON模式文件,协议定义文件。

/api

Web应用程序目录

/web

特定于Web应用程序的组件:静态Web资产,服务器端模板和SPA。

常见应用程序目录

/configs

配置文件模板或默认配置。

confdconsul-template
/init

系统初始化(systemd,upstart,sysv)和进程管理器/主管(runit,supervisord)配置。

/scripts

脚本执行各种构建,安装,分析等操作。

这些脚本使根级Makefile保持简洁(例如)。

/scripts
/build

包装和持续集成。

/build/package
/build/ci/build/ci
/deployments

IaaS,PaaS,系统和容器编排部署配置和模板(docker-compose,kubernetes / helm,mesos,terraform,bosh)。

/test
/test/test/data/test/testdata
/test

其他目录

/docs

设计和用户文档(除了你的godoc生成的文档)。

/docs
/tools
/pkg/internal
/tools
/examples

应用程序和/或公共库的示例。

/examples
/third_party

外部帮助工具,分叉代码和其他第三方实用程序(例如,Swagger UI)。

/githooks

Git钩子。

/assets

与您的存储库一起使用的其他资产(图像,徽标等)。

/website

如果您不使用Github页面,这是放置项目的网站数据的地方。

/website

你不应该有的目录

/src
src
/src/srcHow to Write Go Code$GOPATH$HOME/go/pkg/bin/src/src/src/some/path/to/workspace/src/your_project/src/your_code.goGOPATH