目录

Go | Go 安装

Go语言的3个环境变量

既然要学习Go语言,那么就要先安装Go语言所需的东西。Go语言的安装这边网上搜一下,Linux\windows版本,32\64位版本的应有尽有,这边主要讲解一下Go安装过程中和未来使用中会涉及到的3个环境变量GOROOTGOBINGOPATH

  • GOROOT:Go语言的安装路径,比如我将GO语言安装在F:\Program Study\Go中,那么这个路径就是GOROOT。
  • GOBIN:GO程序生成的可执行文件的路径。
  • GOPATH:可以把GOPATH简单理解成Go语言的工作目录,它的值是一个目录的路径,也可以是多个目录的路径,每一个路径都代表着Go语言的一个工作区位置。

工作区

上文提到了工作区,对于工作区的理解就相当于一个工程项目。那么工作区的目录结构如下图所示(是有规定的):

https://img.dawnguo.cn/Golang/1_0.png

src子目录存放Go源码文件,install产生的archive file(归档文件,也就是以“.a”为扩展名的文件)会存放到pkg子目录,产生的可执行文件会存放到bin子目录。其实,Go语言项目在生命周期内的所有操作(编码、依赖管理、构建、测试、安装等)基本上都是围绕着GOPATH和工作区进行的。

Go语言源码的组织方式

在文件系统中,代码包其实与目录一一对应的,由于目录可以有子目录,所以代码包也可以有子包。一个代码包可以包含任意个.go为扩展名的源码文件,这些源码文件都需要声明属于同一个代码包。代码包的名称一般会与源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会以代码包名称为准。在工作区中,一个代码包的导入路径实际上就是从src子目录,到该包的实际存储位置的相对路径。

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

源码安装后的结果

源码在安装后如果产生了archive file,就会放到该工作区的pkg子目录。一个代码包其实对应一个目录,安装某个代码包而产生的archive file是与这个代码包同名的,放置archive file的目录就是该代码包的导入路径的父路径。比如一个代码包echo的路径(包含echo)是

1
github.com/labstack/echo

那么执行指令

1
go install github.com/labstack/echo

之后,生成的archive file相对于pkg存放的相对目录是github.com/labstack,文件名叫echo.a。其实这个代码包的路径还有另外一层含义,就是该代码包的源码文件存在于github.com这个网站下的labstack组的代码仓库echo中。

但是archive file的相对目录与pkg目录之间还有一级平台相关目录。平台相关目录的名称是由build(构建)的目标操作系统、下划线和目标计算架构的代号组成的。比如build某个代码包的目标操作系统是linux,目标计算架构是64位,那么对应的平台相关目录就是linux_amd64。

综上,src目录下github.com/labstack/echo这个代码包生成的archive file就会被放置到当前工作区pkg子目录下的linux_amd64/github.com/labstack中,文件名叫echo.a。整个示例图如下所示:

https://img.dawnguo.cn/Golang/1_1.png

上述源码包产生的是archive file,如果源码产生了可执行文件,就可能会放到该工作区的bin子目录。

Go程序构建和安装的过程

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

  • build

    build的是库源代码文件的话,会产生archive file,会存在于临时目录中,这里构建的主要意义在于检查和验证。

    build的是命令源码文件的话,会产生可执行文件,这个可执行文件会存放到源码文件所在的目录中。

  • install

    install的是库源代码文件的话,那么产生的archive file会存放到它所在工作区的pkg目录下,具体目录可看上面的。

    install的是命令源代码文件的话,那么产生的可执行文件会存放到它所在工作区的bin目录下或者环境变量GOBIN所指向的目录中。