go 语言环境安装:$goroot 目录详解 | go 技术论坛-金年会app官方网

简述

本文将带你深入理解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 中的包将存储库的完整位置作为导入路径的一部分。

例如,我们将使用以下导入路径在 处导入源代码:

import "github.com/gobuffalo/buffalo"

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

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

总结

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

在 go 1.11 的介绍中, 提到的 ,旨在取代工作区和 gopath。虽然建议开始使用 modules,但是有些环境,例如公司环境,可能还没有准备好使用 modules。

gopath 是设置 go 时比较棘手的一个方面,但是一旦设置好了,我们通常就不再需要关心它了。

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

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