首页 > 解决方案 > $GOPATH[i] 和 $GOPATH[d] 是什么?

问题描述

Go Modules Reference的一部分描述了一些最小模块兼容性的规则。本节中有一个条件列表,其中两个如下所示:

在这种情况下,什么是$GOPATH[i]$GOPATH[d]?(假设我们知道是什么$GOPATH。)

标签: gogo-modulesgopath

解决方案


如命令文档中所述go

GOPATH 环境变量列出了查找 Go 代码的位置。在 Unix 上,该值是一个冒号分隔的字符串。在 Windows 上,该值是以分号分隔的字符串。在计划 9 中,值是一个列表。

如果未设置环境变量,则 GOPATH 默认为用户主目录中名为“go”的子目录(Unix 上为 $HOME/go,Windows 上为 %USERPROFILE%\go),除非该目录包含 Go 发行版。运行“go env GOPATH”查看当前的 GOPATH。

(资源)

因此,您引用的语法$GOPATH[i]仅用于描述 GOPATH 中的项目,正如我们所见,它可以是一个列表,而不仅仅是对单个路径的引用。

假设我的GOPATHLinux 机器上有以下内容:/home/me/go:/gofaster,并且我正在处理/home/me/go/src/example.com/testing.

最小模块兼容性规则会按顺序说明。为了解决我的依赖关系example.com/utils/v2,Go 会检查:

  • 我没有包/home/me/go/src/example.com/testing/vendor/example.com/utils/v2(即供应商目录)
  • 我没有一个包/home/me/go/src/example.com/utils/v2,也没有/gofaster/src/example.com/utils/v2(即检查两个 gopaths)。
  • 一个/home/me/go/src/example.com/utils或其中一个包/gofaster/src/example.com/utils(请注意缺少 v2)。

如果我在这些目录中的任何一个中有一个包,那么它用于解决依赖关系。


推荐阅读