建议:cmd/go:列出可安装的包的版本 ```markdown 建议:cmd/go:列出可安装的包的版本 ```

2vuwiymt  于 6个月前  发布在  Go
关注(0)|答案(6)|浏览(49)

提案详情
在将 go install 用于 https://github.com/jdx/mise 时,我遇到了 issue 无法一致地找到一个可安装版本的列表的问题。

示例:

go list -m -versions -json github.com/go-task/task/v3/cmd/task 返回:

{
        "Path": "github.com/go-task/task/v3/cmd/task",
        "Origin": {
                "VCS": "git",
                "URL": "https://github.com/go-task/task",
                "Subdir": "v3/cmd/task",
                "TagPrefix": "v3/cmd/task/",
                "TagSum": "t1:47DEQpj8HBSa+/TImW+5JCeuQeRkm5NMpJWZG3hSuFU="
        }
}

任何希望找到 github.com/go-task/task/v3/cmd/task 有效版本列表的软件,我认为只需要检查以下内容:

  • github.com/go-task/task/v3/cmd/task
  • github.com/go-task/task/v3/cmd
  • github.com/go-task/task/v3

在找到模块的“根”之前。这进一步复杂化了主要版本在模块根不是仓库根时如何纳入路径的问题。
如果 go install 能有一个列出可安装版本的标志(带 json?),那将会非常有用,因为它在内部某个地方使用这个检查来提供其当前功能,即检查版本是否有效。

gywdnpxw

gywdnpxw1#

你对这个提案有什么不满意的地方吗?

kmynzznz

kmynzznz2#

我认为Go语言不需要构建完整的可安装版本矩阵,只需要检查一组版本:给定的或最新的。

d7v8vwbk

d7v8vwbk3#

我不想构建它们,我想列出它们,对于需要提供可安装版本标签列表的工具。go list 已经可以做到这一点,只是对于子包来说不太可靠。

2nc8po8w

2nc8po8w4#

我说的是构建清单,而不是编写代码。Go语言不需要你想要的列表。
将包与模块版本混淆似乎不是一个好主意,我们已经看到许多人在模块边界重叠时遇到问题。
此外,给定的包路径可能存在于多个模块中的“相同”版本中,只要它们从未被导入到同一个构建图中,就不会冲突:

  • 模块:example/a,版本v0.1.0,包:example/a/b
  • 模块:example/a/b,版本v0.1.0,包:example/a/b
omqzjyyz

omqzjyyz5#

我需要我想要的列表,go list -m -versions 也不需要这个列表吗?这些是用户工具,提案只是将现有功能扩展到子包。另一种方法是简单地抹掉路径,直到收到有效答案。
这将反映其他包安装工具中的功能:

  • cargo install --list
  • pnpm show xyz versions
  • 更多

由于 go installcargo installpnpm install -g 的 Go 等效项,我认为它不应该没有类似的选项来列出可用版本。
至于令人困惑的路径规范,这是进一步证明这个信息可以从工具链中获得的理由,这样 Package 工具就不必对相同的功能进行简单的实现,而这种实现可能没有与 cmd/go 特性相同的考虑因素。
我认为提案的重点很清楚,感谢你写出你的批评而不是只留下一个 👎,即使我不同意。

相关问题