Go 语言环境安装:$GOROOT 目录详解
简述
本文将带你深入理解Go语言环境安装过程中涉及到的GOPATH
环境变量应该如何设置,以及它的作用。理解GOPATH
的意义与掌握如何查找、安装和编译Go的源文件同等重要。说白了,环境变量$GOPATH
代表的就是你所安装的Go语言的工作区的位置。
在GO的工作区中,我们可以管理源文件,已编译的二进制文件和缓存对象。虽然我们可以同时设置多个工作区,但是通常情况下还是推荐大家只设置一个工作区就可以了,一句话GOPATH
就是Go语言工作区的根路径。
设置 $GOPATH
环境变量
$GOPATH
环境变量定义了Go工作区的路径。
默认情况下GOPATH
为$HOME/go
目录,其中$HOME
就是你自己计算机账户根目录。所以,我们可以通过修改环境变量$GOPATH
来改变GO的默认设置。
$GOPATH
不是 $GOROOT
$GOPATH
表示我们编码的工作区位置,通常被定义为$HOME/go
。
$GOROOT
定义的是Go的代码,编译器和工具的区域,并不是我们编写的源代码。$GOROOT
表示我们安装的Go语言位置,通常被定义为/usr/local/go
。
尽管我们不再需要专门设置$GOROOT
变量,但在较旧的资料中仍然引用了该变量。
Go工作区解析
接下来,我们来看一下GO工作区的文件结构。
在GOPATH
定义的工作区下,有三个目录:bin
,pkg
,src
。其中每一个目录都有它特殊的作用。
.
├── bin
├── pkg
└── src
└── github.com/foo/bar
└── bar.go
我们先分别看一下每个目录。
$GOPATH/bin
目录是GO用来存放通过命令go install
编译的二进制文件的位置。操作系统会根据全局环境变量$PATH
来查找和执行编译后的二进制应用程序。所以最好把该目录添加到全局环境变量$PATH
中。
例如,我们没有把 $GOPATH/bin
添加到全局变量 $PATH
中的时候,执行程序的命令如下:
$GOPATH/bin/myapp
当 $GOPATH/bin
被添加到 $PATH
时,我们可以像这样进行相同的调用:
myapp
$GOPATH/pkg
目录是 Go 存储预编译目标文件的地方,以加速程序的后续编译。通常,大多数开发人员不需要访问这个目录。 如果在编译时遇到问题,可以安全地删除这个目录,然后 Go 将重新编译它。
src
目录是所有 .go
文件或源代码的位置。这不应该与 Go 工具使用的源代码相混淆,它位于 $GOROOT
。在编写 Go应用程序、包和库时,我们将把这些文件放在 $GOPATH/src/path/to/code
下。
包是什么?
Go 的代码被组织在包中。一个包表示磁盘上单个目录中的所有文件。一个目录只能包含同一包中的某些文件。包与所有用户编写的 Go 源文件一起存储在 $GOPATH/src
目录下。我们可以通过导入不同的包来理解包的解析。
如果我们的代码是 $GOPATH/src/blue/red
那么它的包名应该是 red
。
red
包的 import 语句为:
import "blue/red"
驻留在源代码存储库,如 GitHub 和 BitBucket 中的包将存储库的完整位置作为导入路径的一部分。
例如,我们将使用以下导入路径在 github.com/gobuffalo/buffalo 处导入源代码:
import "github.com/gobuffalo/buffalo"
因此,这个源代码将在磁盘上的以下位置:
$GOPATH/src/github.com/gobuffalo/buffalo
总结
在本文中,我们讨论了 GOPATH
作为一组文件夹,Go 期望我们的源代码在其中,以及这些文件夹是什么,它们包含什么。我们讨论了如何通过设置 $GOPATH
环境变量来将该位置从默认的 $HOME/go
更改为用户选择的位置。最后,我们讨论了 Go 如何在该文件夹结构中搜索包。
在 Go 1.11 的介绍中, 提到的 Go Modules,旨在取代工作区和 GOPATH
。虽然建议开始使用 modules,但是有些环境,例如公司环境,可能还没有准备好使用 modules。
GOPATH
是设置 Go 时比较棘手的一个方面,但是一旦设置好了,我们通常就不再需要关心它了。
推荐文章: