GOPATH与GOROOT

GOPATH与GOROOT教程

Go 语言 的工程管理需要依靠 GOPATH 和 GOROOT 环境变量的设置。

GOPATH

我们需要将工作区的目录路径添加到环境变量 GOPATH 中。否则,即使处于同一工作区,代码之间也无法通过绝对代码包路径调用。

在实际开发环境中,工作区可以只有一个,也可以有多个,这些工作区的目录路径都需要添加到 GOPATH 中。与 GOROOT 一样,我们应该确保 GOPATH 一直有效。

注意

  • GOPATH 中不要包含 Go 语言的根目录,以便将 Go 语言本身的工作区同用户工作区严格分开。
  • 通过 Go 工具中的代码获取命令 go get,可将指定项目的源码下载到我们在 GOPATH 中设定的第一个工作区中,并在其中完成编译和安装。

源码文件

Go 的源码文件有 3 个种类,即命令源码文件、库源码文件和测试源码文件。

命令源码文件

如果一个源码文件被声明属于 main 代码包,且该文件代码中包含无参数声明和结果声明的 main 函数,则它就是命令源码文件。命令源码文件可通过 go run 命令直接启动运行。

同一个代码包中的所有源码文件,其所属代码包的名称必须一致。如果命令源码文件和库源码文件处于同一个代码包中,那么在该包中就无法正确执行 go build 和 go install 命令。换句话说,这些源码文件将无法通过常规方法编译和安装。

因此,命令源码文件通常会单独放在一个代码包中。这是合理且必要的,因为通常一个程序模块或软件的启动入口只有一个。

同一个代码包中可以有多个命令源码文件,可通过 go run 命令分别运行,但这会使 go build 和 go install 命令无法编译和安装该代码包。所以,我们也不应该把多个命令源码文件放在同一个代码包中。

当代码包中有且仅有一个命令源码文件时,在文件所在目录中执行 go build 命令,即可在该目录下生成一个与目录同名的可执行文件;而若使用 go install 则可在当前工作区的 bin 目录下生成相应的可执行文件。

需要特别注意,只有当环境变量 GOPATH 中只包含一个工作区的目录路径时,go install 命令才会把命令源码文件安装到当前工作区的 bin 目录下;否则,像这样执行 go install 命令就会失败。此时必须设置环境变量 GOBIN,该环境变量的值是一个目录的路径,该目录用于存放所有因安装 Go 命令源码文件而生成的可执行文件。

库源码文件

通常,库源码文件声明的包名会与它直接所属的代码包(目录)名一致,且库源码文件中不包含无参数声明和无结果声明的 main 函数。

安装库源码文件时所生成的归档文件会被存放到当前工作区的 pkg 目录中。

测试源码文件

测试源码文件是一种特殊的库文件,可以通过执行 go test 命令运行当前代码包下的所有测试源码文件。成为测试源码文件的充分条件有两个,如下:

  • 文件名需要以 _test.go 结尾。

  • 文件中需要至少包含一个名称以 Test 开头或 Benchmark 开头,且拥有一个类型为 *testing.T*testing.B 的参数的函数。

  • testing.Ttesting.B 是两个结构体类型。而 *testing.T*testing.B 则分别为前两者的指针类型。它们分别是功能测试和基准测试所需的。

GOPATH与GOROOT总结

Go 语言的工程管理需要依靠 GOPATH 和 GOROOT 环境变量的设置。