提案详情
在将 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?),那将会非常有用,因为它在内部某个地方使用这个检查来提供其当前功能,即检查版本是否有效。
6条答案
按热度按时间gywdnpxw1#
你对这个提案有什么不满意的地方吗?
kmynzznz2#
我认为Go语言不需要构建完整的可安装版本矩阵,只需要检查一组版本:给定的或最新的。
d7v8vwbk3#
我不想构建它们,我想列出它们,对于需要提供可安装版本标签列表的工具。
go list
已经可以做到这一点,只是对于子包来说不太可靠。2nc8po8w4#
我说的是构建清单,而不是编写代码。Go语言不需要你想要的列表。
将包与模块版本混淆似乎不是一个好主意,我们已经看到许多人在模块边界重叠时遇到问题。
此外,给定的包路径可能存在于多个模块中的“相同”版本中,只要它们从未被导入到同一个构建图中,就不会冲突:
example/a
,版本v0.1.0,包:example/a/b
example/a/b
,版本v0.1.0,包:example/a/b
omqzjyyz5#
我需要我想要的列表,
go list -m -versions
也不需要这个列表吗?这些是用户工具,提案只是将现有功能扩展到子包。另一种方法是简单地抹掉路径,直到收到有效答案。这将反映其他包安装工具中的功能:
cargo install --list
pnpm show xyz versions
由于
go install
是cargo install
或pnpm install -g
的 Go 等效项,我认为它不应该没有类似的选项来列出可用版本。至于令人困惑的路径规范,这是进一步证明这个信息可以从工具链中获得的理由,这样 Package 工具就不必对相同的功能进行简单的实现,而这种实现可能没有与
cmd/go
特性相同的考虑因素。我认为提案的重点很清楚,感谢你写出你的批评而不是只留下一个 👎,即使我不同意。
3zwtqj6y6#
CC @bcmills@matloob