Go 语言 工作区的目录主要分为 src 目录、pkg 目录 以及 bin 目录。
Go语言工作区
一般情况下,Go 语言的源码文件必须放在工作区中。但是对于命令源码文件来说,这不是必需的。工作区其实就是一个对应于特定工程的目录,它应包含 3 个子目录:src 目录、pkg 目录和 bin 目录。
- src目录
用于以代码包的形式组织并保存 Go 源码文件,这里的代码包与 src 下的子目录一一对应。例如,若一个源码文件被声明属于代码包 log,那么它就应当保存在 src/log 目录中。
当然,也可以把 Go 源码文件直接放在 src 目录下,但这样的 Go 源码文件就只能被声明属于 main 代码包了。除非用于临时测试或演示,一般还是建议把 Go 源码文件放入特定的代码包中。
- pkg目录
用于存放通过 go install 命令安装后的代码包的归档文件。前提是代码包中必须包含 Go 库源码文件。归档文件是指那些名称以 .a 结尾的文件。该目录与 GOROOT 目录下的 pkg 目录功能类似。区别在于,工作区中的 pkg 目录专门用来存放用户代码的归档文件。
编译和安装用户代码的过程一般会以代码包为单位进行。比如 log 包被编译安装后,将生成一个名为 log.a 的归档文件,并存放在当前工作区的 pkg 目录下的平台相关目录中。
- bin目录
与 pkg 目录类似,在通过 go install 命令完成安装后,保存由 Go 命令源码文件生成的可执行文件。在类 Unix 操作系统下,这个可执行文件一般来说名称与源码文件的主文件名相同。而在 Windows 操作系统下,这个可执行文件的名称则是源码文件主文件名加 .exe 后缀。
推荐的 GO 应用目录
对于应用项目,其目录布局方式我们可以参考Go项目自身,以及一些使用Go语言开发的优秀开源项目(如Docker,Kubernetes,etcd)等,通过研究这些项目的目录布局,我们可以抽象出以下标准目录:
demo
├── 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