理解Go语言中的GOPATH

引言

本文将引导您了解什么是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工作空间剖析

在Go工作空间或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

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的一个比较棘手的方面,但一旦设置好了,我们通常可以忘记它。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CHQIUU

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值