Go 语言环境安装:$GOROOT 目录详解 2 个改进

简述

本文将带你深入理解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定义的工作区下,有三个目录:binpkgsrc。其中每一个目录都有它特殊的作用。

.
├── 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 时比较棘手的一个方面,但是一旦设置好了,我们通常就不再需要关心它了。

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!