$GOPATH[i] 和 $GOPATH[d] 是什么?

What is $GOPATH[i] and $GOPATH[d]?

Go 模块参考的

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

在此上下文中,$GOPATH[i]$GOPATH[d] 是什么? (假设我们知道 $GOPATH 是什么。)

go 命令的文档所述:

The GOPATH environment variable lists places to look for Go code. On Unix, the value is a colon-separated string. On Windows, the value is a semicolon-separated string. On Plan 9, the value is a list.

If the environment variable is unset, GOPATH defaults to a subdirectory named "go" in the user's home directory ($HOME/go on Unix, %USERPROFILE%\go on Windows), unless that directory holds a Go distribution. Run "go env GOPATH" to see the current GOPATH.

(source)

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

假设我的 Linux 机器上有以下 GOPATH/home/me/go:/gofaster,并且我正在 /home/me/go/src/example.com/testing.[=23= 中进行一个项目]

最小模块兼容性规则会这样说,即。为了解决我的依赖关系 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 的 none 中没有包,在 /gofaster/src/example.com/utils/v2 中也没有包(即检查两个路径)。
  • /home/me/go/src/example.com/utils/gofaster/src/example.com/utils 中的一个包(注意缺少 v2)。

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