典型结构
project
├── 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/
internal 目录下仅放置内部包可以导入的包。
vendor 目录,本地缓存包 实现reproducible builds 可重现构建、go build -mod=vendor 可实现基于vendor目录下包版本的构建。
reproducible builds 可重现构建: 同一份源码在相同操作系统环境下 编译后得到相同的二进制文件。
cmd 目录放置main包的源文件,多个main包则要在不同目录 ,只有一个可执行程序时可省略,直接main.go放在一级目录
pkgN放置可被自身使用,且能被外部项目引用的包,与internal目录对照。
go mod 和 go sum ,go 语言包依赖管理的配置文件,也是import 相对路径的 root ,go mod示例如下:
module helloworld
go 1.16