当前位置:   article > 正文

gopath 设置_设置 GOPATH 有什么意义?

gopath的作用

前言

我们都知道 Go 的环境安装需要配置三个环境变量,他们分别是:

  • GPROOT:Go语言安装根目录的路径,也就是Go语言的安装路径。

  • GOBIN:Go程序生成的可执行文件(executable file)的路径。

  • GOPATH:指向工作区目录的路径,是我们自定义的工作空间,可定义多个。

设置 GOPATH 有什么意义?

之前只知道GOPATHGo语言的工作目录,他的值是一个或者多个路径(不同系统分隔符不同),每个路径代表Go语言的一个工作区。

我们利用这些工作区去防止Go语言的源码文件(source file),已经安装后的归档文件(archive file)和可执行文件(executable file)。

事实上,由于Go语言项目在其生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)基本上都是围绕GOPATH和工作区进行的。所以它的背后还有以下几个知识点,分别是:

1、Go语言源码的组织方式

Go语言的源码是以代码包为基本单位的。在文件系统中,这些代码包和目录是一一对应的。由于目录可以有子目录,所以代码包也可以有子包。

一个代码包中可以包含任意个以.go为扩展名的源码文件,这些源码文件都需要被声明属于同一个代码包。

代码包的名称一般会与源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。

每个代码包都有导入路径。代码包的导入路径是其他代码在使用该包中的程序实体时,需要引入的路径。在实际使用程序实体前,我们必须先导入其所在的代码包。具体方式就是import该包的导入路径。就像这样:

import "github.com/labstack/echo"
go install github.com/labstack/echo

不会冲突,原因同上。同理,不同工作区的两个相同导入路径的代码包,编译的时候不会编译第二个工作区的代码包。

2、多个工作区中都存在导入路径相同的代码包会产生冲突吗?

GOPATH指定的工作区顺序查找,找到即返回,找不到则报错。

1、Go语言在多个工作区中查找依赖包是以怎样的顺序进行的?

补充

如果安装的是命令源码文件,那么结果过文件会被搬运到所在工作区的bin目录中或者环境变量GOBIN指向的目录中。

进一步说,如果安装的是库源码文件,那么结果文件会被搬运到所在工作区的pkg目录下的某个子目录中。

安装操作会先执行构建,然后执行链接操作,并且把结果文件搬运到指定目录。

如果构建的是命令源码文件,操作产生过的结果文件会被搬运到源码文件所在的目录中。

如果构建的是库源码文件,操作产生的结果文件只会存放在临时目录中。这里的构建的主要意义在于检查和验证。

构建使用命令go build,安装使用命令go install。构建和安装代码时都会执行编译、打包等操作,并且这些操作生成的任何文件都会先保存在某个临时目录中。

3、构建和安装 Go 程序的过程

所以,我们知道某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工作区的 pkg 子目录下对应的目录中,或者被直接放置到该工作区的 bin 子目录中。

归档文件的相对目录与pkg目录直接还有一层平台相关目录。平台相关目录的名称是由build(也称“构建”)的目标操作系统、下划线和目标计算架构的代号组成的。如:linux_amd64

上面这个代码包还有一层含义就是:该代码包的源码文件存放于Github上的labstack组的代码仓库echo中。

生成的归档文件就是:github.com/labstack,文件名为echo.a

比如,一个已存在的代码包的导入路径是:github.com/labstack/echo那么执行命令

放置他的相对目录就是该包的导入路径的直接父级。

源码文件是以代码包的形式组织起来的,一个代码包其实就对应一个目录。安装某个代码包而产生的归档文件是与这个代码包同名的。

源码文件通常放在工作区下的src子目录下;安装后如果产生了归档文件,就会放到该工作区的pkg子目录;如果产生了可以执行文件,就会放进该工作区的bin子目录下。

2、源码安装后的结果

所以说,Go语言源码的组织方式就是以环境变量GOPATH、工作区、src目录和代码包为主线的。一般情况下,Go语言的源码文件都需要被存放在环境变量GOPATH包含的某个工作区(目录)中的src目录下的某个代码包(目录)中。

在工作区中,一个代码包的导入路径就是从src的子目录,到该包的实际存储位置的相对路径。

2194c92324974abdce5b7a35d474a2fe.png

所以,我们知道某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工作区的 pkg 子目录下对应的目录中,或者被直接放置到该工作区的 bin 子目录中。

3、构建和安装 Go 程序的过程

构建使用命令go build,安装使用命令go install。构建和安装代码时都会执行编译、打包等操作,并且这些操作生成的任何文件都会先保存在某个临时目录中。

如果构建的是库源码文件,操作产生的结果文件只会存放在临时目录中。这里的构建的主要意义在于检查和验证。

如果构建的是命令源码文件,操作产生过的结果文件会被搬运到源码文件所在的目录中。

安装操作会先执行构建,然后执行链接操作,并且把结果文件搬运到指定目录。

进一步说,如果安装的是库源码文件,那么结果文件会被搬运到所在工作区的pkg目录下的某个子目录中。

如果安装的是命令源码文件,那么结果过文件会被搬运到所在工作区的bin目录中或者环境变量GOBIN指向的目录中。

补充

1、Go语言在多个工作区中查找依赖包是以怎样的顺序进行的?

GOPATH指定的工作区顺序查找,找到即返回,找不到则报错。

2、多个工作区中都存在导入路径相同的代码包会产生冲突吗?

不会冲突,原因同上。同理,不同工作区的两个相同导入路径的代码包,编译的时候不会编译第二个工作区的代码包。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/193565
推荐阅读
相关标签
  

闽ICP备14008679号