基于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.