Go基础1 GOPATH与工作区

1,585 阅读4分钟
Go环境变量

我们在安装完go之后,往往会设置如下系统或者用户环境变量:

  1. GOROOT:Go 语言安装根目录的路径,也就是 GO 语言的安装路径
  2. GOPATH:若干工作区目录的路径。是我们自己定义的工作空间
  3. GOBIN:GO 程序生成的可执行文件(executable file)的路径。

设置 GOPATH的意义

  1. GOPATH 可以简单理解成 Go 语言的工作目录,它的值是一个目录的路径,也可以是多个目录路径,每个目录都代表 Go 语言的一个工作区(workspace)。
  2. 我们需要利于这些工作区,去放置 Go 语言的源码文件(source file),以及安装(install)后的归档文件(archive file,也就是以“.a”为扩展名的文件)和可执行文件(executable file)。

如何安装Go以及配置环境变量请参考:
下载并安装 - Go 编程语言 (google.cn)

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

1. Go 语言的源码是以代码包为基本组织单位,每个代码包可以有子包。
2. 一个代码包中可以包含任意个以.go 为扩展名的源码文件,这些源码文件都需要被声明属于同一个代码包。
3. 代码包的名称一般会与源码文件所在的目录同名。如果不同名,那么在构建、安装的过程中会代码包名称为准
4. 我们在实际使用程序实体之前,必须先导入其所在的代码包:
import "github.com/labstack/echo"
5. 一个代码包的导入路径实际上就是从 src 子目录,到该包的实际存储位置的相对路径。

源码安装后的结果
某个工作区的 src 子目录下的源码文件在安装后一般会被放置到当前工作区的 pkg 子目录(.a 归档文件)下对应的目录中,或者被直接放置到该工作区的 bin 子目录中(可执行文件)。

归档文件存放的具体位置和规则
安装某个代码包而产生的归档文件是与这个代码包同名的, 其会被放在该代码包导入路径的直接父级目录。

比如代码包导入路径如下:
github.com/labstack/echo

则归档文件会存放在
github.com/labstack

归档文件的相对目录与 pkg 目录之间还有一级目录,叫做平台相关目录。平台相关目录的名称是由 build(也称“构建”)的目标操作系统、下划线和目标计算架构的代号组成的。: 所以最终存放目录会是:
pkg/linux_amd64/github.com/labstack

image.png

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

go build

  1. 如果构建的是库源码文件,那么操作后产生的结果文件只会存在于临时目录中。这里的构建的主要意义在于检查和验证。
  2. 如果构建的是命令源码文件,那么操作的结果文件会被搬运到源码文件所在的目录中

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

  1. 如果安装的是库源码文件,那么结果文件会被搬运到它所在工作区的 pkg 目录下的某个子目录中。
  2. 如果安装的是命令源码文件,那么结果文件会被搬运到它所在工作区的 bin 目录中,或者环境变量GOBIN指向的目录中。