说明
- 工程管理即项目管理,go语言中提供了工作区管理,源码管理,第三方依赖库管理等规范。
- go是工程语言,不像学院语言那么自由,对工程管理做了一些规范。
工作区(workspace)管理
- go语言编程,并不是随便创建一个目录就能作为工作目录,因为依赖文件的查找和中间、目标文件的生成,以及可执行文件的安装,go对工作区的目录结构以及工作区的指定有一定规范。
- 当然如果工程只有单个源码文件或者多个文件但是导入包路径按绝对路径写死也是可以编译的,但是不建议这样做。
查看和设置
- go环境安装好后会设置默认的工作区,并且在该目录下创建好默认的目录结构,linux下为~/go/。
- go通过GOPATH环境变量设置工作区路径,可以手动对其修改,但是修改后需要手动创建这些子目录。
- 查看
go env GOPATH
- 设置
export $GOPAHT=/xxx/xxx
- 注意:GOPATH可以设置多个,但是如果设置了多个路径,需要设置GOBIN环境变量来确定可执行文件放在哪个目录。
目录结构
- 工作区包含3个子目录。
- src目录:存放项目源码,一个项目分为一个子目录, go get下载的第三方包也放在该目录。
- pkg目录:存放经由go install命令构建安装的“.a”归档文件。
- bin目录:与pkg目录类似,在通过go install命令完成安装后,保存由Go命令源码文件生成的可执行文件。
发展和改进
- GOPATH机制比较原始和简单,在发展过程中体现出了一些不足之处,例如:
- 代码必须放在GOPATH路径下的src目录中,不然,导入工程内的包会提示查找不到。
- 依赖包需要手动管理,没有版本号信息等。
- …
- 官方的管理机制也在不断改善 ,经历了GOPATH、go vendor,当前官方最新和主流的机制是go mod。
源码和第三方依赖库管理
- go源码和第三方依赖库都采用源码包的形式进行组织和管理。
工程示例
- 创建工程
- 早期创建新工程需要在工作区的src目录下,但是采用go mod机制不需要,可以在任意目录创建。
- 创建一个工程根目录,例如:example,将代码都放在该根目录下。
- 编译和安装
- 编译需要在该工程根目录下执行“go build”命令,go编译器会自动推导依赖,编译出的可执行文件名就是工程名。
- 安装需要在同样的目录执行“go install”,go 编译器会将生成的文件放置到工作区的bin和pkg下。
- 单文件程序也可以直接编译该文件,如下:
go build xxx.go