1

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

  • $GOPATH[i]/src/$modpath/$vn/$suffix存在目录(对于任何 root $GOPATH[i]),
  • 该文件$GOPATH[d]/src/$modpath/go.mod存在(对于某些 root $GOPATH[d])并将模块路径声明为$modpath/$vn,

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

4

1 回答 1

2

如命令文档中所述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)。

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

于 2021-02-22T14:25:21.013 回答