# 项目结构
Go 目前并没有官方的项目结构,我们可以参考社区的常用结构
# 可执行项目(应用)结构
exe-layout
├── cmd/
│ ├──app1/
│ │ └── main.go
│ └──app2/
│ └── main.go
├── go.mod
├── go.sum
├── internal/
│ ├── pkga/
│ │ └── pkg_a.go
│ └── pkgb/
│ └── pkg_b.go
├── pkg1/
│ └── pkg1.go
├── pkg2/
│ └── pkg2.go
└── vendor/
# 库项目结构
lib-layout
│
├── go.mod
├── go.sum
├── internal/
│ ├── pkga/
│ │ └── pkg_a.go
│ └── pkgb/
│ └── pkg_b.go
├── pkg1/
│ └── pkg1.go
└── pkg2/
└── pkg2.go
# 目录解释
- cmd 目录: 存放项目要编译构建的可执行文件所对应的 main 包的源码文件;
- 项目包(pkgN): 每个项目下的非 main 包都“平铺”在项目的根目录下,每个目录对应一个 Go 包;
- internal 目录:存放仅项目内部引用的 Go 包,这些包无法被项目之外引用;
- vendor 目录:这是一个可选目录,为了兼容 Go 1.5 引入的 vendor 构建模式而存在的。这个目录下的内容均由 Go 命令自动维护,不需要开发者手工干预。