你正在使用哪个版本的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 doc
为github.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
,而不是模块,所以我怀疑这方面可能还需要更多的工作。
9条答案
按热度按时间gmol16391#
由于它需要打开源文件,而不仅仅是读取它们
抱歉,你的意思是什么?阅读或解析源文件似乎比仅仅打开文件更耗费资源。
就我所知,
go doc
已经可以在不添加任何额外工作的情况下访问包名,但我可能错了。pieyvz9o2#
对不起,s/reading/listing/。
我认为
go doc
仅在识别到候选软件包后才检查软件包名称。因此,这对于您的test.tld/foo/v2
示例(如果我们硬编码了一个/vN
启发式,这似乎合理),但可能不适用于您的test.tld/foobar
示例。jfewjypa3#
简单地使用包路径的最后一个组件,并通过启发式方法去除
/vN
,对我来说似乎也是合理的。使用与包名不同的包路径的软件包应该很少见,而且并不特别鼓励这样做。kognpnkq4#
1.17版本有什么变化吗?谢谢。
r8xiu3jd5#
https://go.dev/cl/457195提到了这个问题:
cmd/doc: match major module versions without needing a /vN suffix
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?
8hhllhi27#
也许你可以单独提交问题?或者问题太多了?
我会继续发现问题并提交。我只是想知道是否还有我错过的更大的元问题。
澄清一下,我还没有发现其他问题。可能一切都运行正常。
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
。fjnneemd9#
@mvdan,我喜欢使用
package
语句进行查找的想法,但我担心这会太昂贵(因为它需要打开源文件,而不仅仅是列出它们)。