基于Google标准的Golang-Project-Layout
标准模板
https://github.com/JasonkayZK/Go_Learn/tree/golang-project-layout
翻译版
https://github.com/golang-standards/project-layout
这是 Go 应用程序项目的基本布局。它不是核心 Go 开发团队定义的官方标准;然而,它是 Go 生态系统中一组常见的老项目和新项目的布局模式。其中一些模式比其他模式更受欢迎。它还具有许多小的增强,以及对任何足够大的实际应用程序通用的几个支持目录。
main.gointernalvendor
Go ModulesGo Modulesgo.modmod3755432819
此项目布局是通用的,并且不会尝试强加一个特定的 Go 包结构。
这是社区的努力。 如果看到新的模式,或者认为一个现有的模式需要更新,请提一个 issue。
gofmtgolint
- https://talks.golang.org/2014/names.slide
- https://golang.org/doc/effective_go.html#names
- https://blog.golang.org/package-names
- https://github.com/golang/go/wiki/CodeReviewComments
Go Project Layout
更多关于包的命名和组织以及其他代码结构的建议:
Go 目录
/cmd
本项目的主干。
/cmd/myapp
/pkg/internal
main/internal/pkg
/cmd
/internal
release notesinternal
/internal/app/internal/app/myapp/internal/pkg/internal/pkg/myprivlib
/pkg
/pkg/mypubliclibinternal/pkgI'll take pkg over internalpkginternal
Best Practices for Industrial Programming
/pkg
如果你的应用程序项目真的很小,并且额外的嵌套并不能增加多少价值(除非你真的想要:-),那就不要使用它。当它变得足够大时,你的根目录会变得非常繁琐时(尤其是当你有很多非 Go 应用组件时),请考虑一下。
/vendor
Go Modulesgo mod vendor/vendorgo build-mod=vendor
如果你正在构建一个库,那么不要提交你的应用程序依赖项。
1.13https://proxy.golang.orgherevendor
模块代理
服务应用程序目录
/api
OpenAPI/Swagger 规范,JSON 模式文件,协议定义文件。
/api
Web 应用程序目录
/web
特定于 Web 应用程序的组件:静态 Web 资产、服务器端模板和 SPAs。
通用应用目录
/configs
配置文件模板或默认配置。
confdconsul-template
/init
System init(systemd,upstart,sysv)和 process manager/supervisor(runit,supervisor)配置。
/scripts
执行各种构建、安装、分析等操作的脚本。
https://github.com/hashicorp/terraform/blob/master/Makefile
/scripts
/build
打包和持续集成。
/build/package
/build/ci/build/ci
/deployments
/deploy
/test
/test/test/data/test/testdata
/test
其他目录
/docs
设计和用户文档(除了 godoc 生成的文档之外)。
/docs
/tools
/pkg/internal
/tools
/examples
你的应用程序和/或公共库的示例。
/examples
/third_party
外部辅助工具,分叉代码和其他第三方工具(例如 Swagger UI)。
/githooks
Git hooks。
/assets
与存储库一起使用的其他资产(图像、徽标等)。
/website
如果你不使用 Github 页面,则在这里放置项目的网站数据。
/website
你不应该拥有的目录
/src
src
srcsrcHow to Write Go Code$GOPATH$HOME/go/pkg/bin/src/src/src/some/path/to/workspace/src/your_project/src/your_code.goGOPATH
Badges
gofmtgo vetgocyclogolintineffassignlicensemisspellgithub.com/golang-standards/project-layout
Notes
A more opinionated project template with sample/reusable configs, scripts and code is a WIP.