go cmd/doc:匹配主模块版本大于1,无需/vN后缀,

mlmc2os5  于 6个月前  发布在  Go
关注(0)|答案(9)|浏览(50)

你正在使用哪个版本的Go( go version )?

我正在使用Go 1.15,但我确认以下描述的行为在

go version devel +a3868028ac Sat Sep 19 09:43:15 2020 +0000 linux/amd64

之前没有任何不同。

这个问题在最新版本中是否重现?

是的

你正在使用什么操作系统和处理器架构( go env )?

N/A

你做了什么?

我有一个模块,它依赖于github.com/go-chi/chi/v4。这个go.mod包含了一些代码(并且它不涉及任何其他名为chi的模块或包)。在这个模块内部,我试图使用go doc来查看这个依赖项的一些文档。

你期望看到什么?

我应该能够使用名称chi来调用github.com/go-chi/chi/v4的包文档:

$ go doc chi.get
package chi // import "github.com/go-chi/chi/v4"

func (mx *Mux) Get(pattern string, handlerFn http.HandlerFunc)
    Get adds the route `pattern` that matches a GET http method to execute the
    `handlerFn` http.HandlerFunc.

你看到了什么?

名称chi不足以让go docgithub.com/go-chi/chi/v4带来包文档。我需要将其称为chi/v4:

$ go doc chi.get
doc: symbol chi is not a type in package main installed in "."
exit status 1
$ go doc chi/v4.get
package chi // import "github.com/go-chi/chi/v4"

func (mx *Mux) Get(pattern string, handlerFn http.HandlerFunc)
    Get adds the route `pattern` that matches a GET http method to execute the
    `handlerFn` http.HandlerFunc.

顺便说一下,是否有其他更通用的问题跟踪器来更好地处理模块的go doc改进?我注意到go help doc只提到了GOPATH,而不是模块,所以我怀疑这方面可能还需要更多的工作。

gmol1639

gmol16391#

由于它需要打开源文件,而不仅仅是读取它们
抱歉,你的意思是什么?阅读或解析源文件似乎比仅仅打开文件更耗费资源。
就我所知,go doc 已经可以在不添加任何额外工作的情况下访问包名,但我可能错了。

pieyvz9o

pieyvz9o2#

对不起,s/reading/listing/。
我认为go doc仅在识别到候选软件包后才检查软件包名称。因此,这对于您的test.tld/foo/v2示例(如果我们硬编码了一个/vN启发式,这似乎合理),但可能不适用于您的test.tld/foobar示例。

jfewjypa

jfewjypa3#

简单地使用包路径的最后一个组件,并通过启发式方法去除 /vN ,对我来说似乎也是合理的。使用与包名不同的包路径的软件包应该很少见,而且并不特别鼓励这样做。

kognpnkq

kognpnkq4#

1.17版本有什么变化吗?谢谢。

r8xiu3jd

r8xiu3jd5#

https://go.dev/cl/457195提到了这个问题:cmd/doc: match major module versions without needing a /vN suffix

hec6srdp

hec6srdp6#

@robpike@mvdan
By the way, is there some other issue tracking more general go doc improvements to better work with modules?
Not that I know of. Maybe you can file individual issues? Or are there too many of them?

8hhllhi2

8hhllhi27#

也许你可以单独提交问题?或者问题太多了?
我会继续发现问题并提交。我只是想知道是否还有我错过的更大的元问题。
澄清一下,我还没有发现其他问题。可能一切都运行正常。

0aydgbwb

0aydgbwb8#

我真的很惊讶,之前没有人发现这个问题。我认为这是因为很少有人知道如何使用 go doc 进行简短的查询,而且在一般情况下,没有很多模块有 v1 之后的导入路径。
我同意这个问题需要修复。乍一看,它似乎并不复杂,所以对于想要了解 cmd/doc 的人来说,这可能是一个很好的第一个问题。
关于修复,也许我们可以使用包名进行查找。这样,go doc foo.Bar 将通过 package foo 找到 test.tld/foo/v2,而在类似的情况下,如果 go doc foo.Bar 被命名为 package foo,go doc foo.Bar 仍然可以找到 test.tld/foobar

fjnneemd

fjnneemd9#

@mvdan,我喜欢使用package语句进行查找的想法,但我担心这会太昂贵(因为它需要打开源文件,而不仅仅是列出它们)。

相关问题