【问题标题】:What is $GOPATH[i] and $GOPATH[d]?$GOPATH[i] 和 $GOPATH[d] 是什么?
【发布时间】:2021-02-21 19:01:29
【问题描述】:

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

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

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

【问题讨论】:

  • 和 PATH 一样,GOPATH 是一个路径列表

标签: go go-modules gopath


【解决方案1】:

go 命令的文档所述:

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

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

(source)

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

假设我的 Linux 机器上有以下 GOPATH/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)。

如果我在这两个目录中确实有一个包,那么它将用于解决依赖关系。

【讨论】:

    猜你喜欢
    • 2011-12-19
    • 2014-09-06
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-21
    • 1970-01-01
    相关资源
    最近更新 更多