本文将引导您了解什么是GOPATH
,它是如何工作的,以及如何设置它。这是设置Go开发环境的关键步骤,也是理解Go如何查找、安装和构建源文件的关键步骤。在本文中,我们将使用GOPATH
来讨论我们将要讨论的文件夹结构的概念。我们将使用$GOPATH
来引用Go用于查找文件夹结构的环境变量。
Go工作空间是Go管理我们的源文件、编译后的二进制文件和缓存对象的方式,用于以后更快的编译。虽然可以有多个空间,但通常也建议只有一个Go工作区。GOPATH
充当工作区的根文件夹。
$GOPATH
环境变量$GOPATH
环境变量列出了Go可以查找的工作空间。
默认情况下,Go假设我们的GOPATH
位置是$HOME/go
,其中$HOME
是我们计算机上用户帐户的根目录。我们可以通过设置$GOPATH
环境变量来改变这一点。
有关设置$GOPATH
变量的更多信息,请参阅Go文档。
此外,本[系列]将介绍如何安装Go和设置Go开发环境。
$GOPATH
不是$GOROOT
$GOROOT
是Go代码、编译器和工具所在的地方——它不是我们的源代码。$GOROOT
通常类似于/usr/local/go
。我们的$GOPATH
通常类似于$HOME/go
。
虽然我们不再需要专门设置$GOROOT
变量,但它仍然在旧的材料中被引用。
现在,让我们讨论Go工作空间的结构。
在Go工作空间或GOPATH
中,有三个目录:bin
、pkg
和src
。这些目录中的每一个对Go工具链都有特殊的含义。
.
├── bin
├── pkg
└── src
└── github.com/foo/bar
└── bar.go
让我们来看看这些目录。
$GOPATH/bin
目录是Go存放Go install
编译后的二进制文件的地方。我们的操作系统使用$PATH
环境变量来查找可以在没有完整路径的情况下执行的二进制应用程序。建议将此目录添加到我们的全局$PATH
变量中。
例如,如果我们没有将$GOPATH/bin
添加到$PATH
中来执行程序,我们将需要运行:
$GOPATH/bin/myapp
When $GOPATH/bin
is added to $PATH
we can make the same call like such:
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等源代码库中的包,在它们的导入路径中都有仓库的完整位置。
例如,我们将使用以下导入路径在https://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,旨在替换Go工作区和GOPATH
。虽然建议开始使用模块,但有些环境,例如公司环境,可能还没有准备好使用模块。
GOPATH
是设置Go的一个比较棘手的方面,但一旦设置好了,我们通常可以忘记它。