学习Go语言-工作区和GOPATH的注意事项

时间:2021-9-6     作者:smarteng     分类: 编程


工作区和GOPATH

在开始学习go语言的时候,新手总是会遇到这样那样的问题,
怎么安装go语言,这里就不再详细说明,根据自己的机器来安装合适的版本,
Mac系统直接运行brew即可:


接下来说一下 安装之后的设置:
大体我们需要设置3个环境变量,即GOROOT、GOPATH和GOBIN。其中,GOPATH背后的概念是最多的,也是最重要的。
我们先来说一下GOPATH,go1.8之前必须设置这个变量,从go 1.8开始,GOPATH环境变量现在有一个默认值,就是在用户根目录的 go目录。
为什么要设置GOPATH呢?
答案是: 环境变量GOPATH的值可以是一个目录的路径,也可以包含多个目录路径,如果是多个目录,用: 进行分割,每个目录都代表Go语言的一个工作区(workspace)。这些工作区用于放置Go语言的源码文件(source file)目录src ,以及安装(go install)后的中间文件 目录pkg 和可执行文件(executable file)目录bin。
这个问题其实主要考察了4个知识点,分别是:
1.你是否清楚Go语言源码的组织方式;
2.你是否了解源码安装后的结果(只有在安装后,Go语言源码才能被我们或其他代码使用);
3.你是否理解构建和安装Go程序的过程。
4.你是否清楚go build命令的一些可选项的用途和用法
go语言的代码组织方式
Go语言的源码是以代码包为基本组织单位的。
一个代码包中可以包含任意个以.go为扩展名的源码文件。
这些源码文件都需要被声明为属于同一个代码包。即所有的文件都必须以 package xxx 开始
代码包的名称一般会与这些源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。
代码包的导入路径是其他代码在使用该包中的程序实体时需要引入的路径。在实际使用某个功能之前,我们必须先导入其所在的代码包。 import xxx 。
在工作区中,一个代码包的导入路径实际上就是从src子目录,到该包的实际存储位置的相对路径。
go install 后的结果
install之后的结果存放的目录是在pkg目录下,这里还有一级平台目录叫做平台相关目录。平台相关目录跟目标操作系统有关,是由目标操作系统、下划线和目标计算架构的代号组成的。例如:darwin_amd64 Mac下的目录,这个是由几个环境变量组成

构建和安装
构建使用命令go build,安装使用命令go install,
构建和安装代码包的时候都会执行编译、打包等操作,并且这些操作生成的任何文件都会先被保存到某个临时的目录中。
go build 是lib库文件(即package 非main的包),那么操作的结果文件只会存在于临时目录中。这里的构建的主要意义在于检查和验证。
go build是命令文件(即package 为main的包),那么会编译打包,在源码文件目录生成一个可执行文件。
go install 操作会先执行构建,然后还会进行链接操作,并且把结果文件搬运到指定目录。
如果是lib库源码文件,那么结果文件会被搬运到它所在工作区的pkg目录下的平台相关目录中。
如果是命令源码文件,那么结果文件会被搬运到它所在工作区的bin目录中,或者环境变量GOBIN指向的目录中。
这里要注意,如果是设置了多个工作区,那么 GOBIN 是一定要设置的,要不然 go install 就会报错了。
go build 命令详解
go build命令用于编译我们指定的源码文件或代码包以及它们的依赖包。
那么我们怎么确定哪些代码包被编译了呢?有两种方法。
运行go build命令时加入标记-x,这样可以看到go build命令具体都执行了哪些操作。另外也可以加入标记-n,这样可以只查看具体操作而不执行它们。
运行go build命令时加入标记-v,这样可以看到go build命令编译的代码包的名称。它在与-a标记搭配使用时很有用。


总结
Go语言提供的很多工具都是在GOPATH和工作区的基础上运行的,比如上面提到的 go build 、 go install 和 go get ,这三个命令,所以 设置GOPATH和工作区才比较重要。

标签: gopath