了解GOPATH

本文将引导您了解“GOPATH”是什么,它是如何工作的,以及如何设置它。这是设置Go开发环境的关键步骤,也是了解Go如何查找,安装和构建源文件的关键步骤。

介绍

本文将GOPATH您了解GOPATH是什么,它是如何工作的,以及如何设置它。 这是设置Go开发环境的关键步骤,也是了解Go如何查找,安装和构建源文件的关键步骤。 在本文中,我们将在引用我们将要讨论的文件夹结构的概念时使用GOPATH 我们将使用$GOPATH来引用Go用于查找文件夹结构的环境变量。

Go Workspace是Go如何管理我们的源文件,已编译的二进制文件以及稍后用于更快编译的缓存对象。 虽然可以有多个空格,但通常也建议只有一个Go工作区。 GOPATH充当工作空间的根文件夹。

设置$GOPATH环境变量

$GOPATH环境变量列出了Go寻找Go Workspaces的位置。

默认情况下,Go假设我们的GOPATH位置在$HOME/go ,其中$HOME是我们计算机上用户帐户的根目录。 我们可以通过设置$GOPATH环境变量来改变它。 有关进一步研究,请按照本教程在Linux中读取和设置环境变量

有关设置$GOPATH变量的更多信息,请参阅Go 文档

此外,本系列将介绍如何安装Go并设置Go开发环境。

$GOPATH不是$GOROOT

$GOROOT是Go的代码,编译器和工具所在的地方 - 这不是我们的源代码。 $GOROOT通常类似于/usr/local/go 我们的$GOPATH通常类似$HOME/go

虽然我们不再需要专门设置$GOROOT变量,但仍然在旧材料中引用它。

现在,我们来讨论Go Workspace的结构。

Go工作区的剖析

在Go Workspace或GOPATH ,有三个目录: binpkgsrc 这些目录中的每一个对Go工具链都有特殊意义。

.
├── 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)将存储库的完整位置作为其导入路径的一部分。

例如,我们将使用以下导入路径在https://github.com/gobuffalo/buffalo导入源代码:

import "github.com/gobuffalo/buffalo"

因此,此源代码将位于磁盘上的以下位置:

$GOPATH/src/github.com/gobuffalo/buffalo

结论

在本文中,我们讨论了GOPATH作为一组文件夹,Go期望我们的源代码存在于其中,以及这些文件夹是什么,以及它们包含什么。 我们讨论了如何通过设置$GOPATH环境变量将该位置从默认的$HOME/go更改为用户的选择。 最后,我们讨论了Go如何在该文件夹结构中搜索包。

Go Modules在Go 1.11中引入,旨在取代Go Workspaces和GOPATH 虽然建议开始使用模块,但某些环境(如企业环境)可能尚未准备好使用模块。

GOPATH是设置Go的棘手方面之一,但一旦建立起来,我们通常可以忘记它。