似乎godoc
工具不了解Go modules。
一个简单的godoc -goroot=.
用于提供项目文件,但不会生成软件包的文档。我从projects源目录进行了测试,该目录还存储了go.mod
和go.sum
模块文件。
如何为$GOPATH
之外的Go模块中的所有软件包生成文档?
在release notes of Go 1.12中写道,godoc
工具将不包含在以后的Go版本中,并且只能在 Go 1.12 之后通过go get
使用。一个人应该使用Go go doc
command。但是,go doc
不会生成“很容易阅读”的HTML页面。 是否存在从可输出HTML或Markdown的Go源代码生成文档的替代方法?
答案 0 :(得分:5)
显然,它已在https://github.com/golang/go/issues/33655
中修复。我要做的就是升级到1.14版,然后在目录中运行godoc
并运行go模块。
每当godoc
命令以模块模式运行时,go
命令应以模块模式运行。因此,godoc
应该在相同的环境和工作目录下运行go env GOMOD
,并解释结果。
如果go env GOMOD
的结果为空字符串,则使用GOPATH
模式,并且godoc
的行为将与GOPATH
相同,并且它将仅查看GOPATH
目录。
答案 1 :(得分:3)
问题不仅仅在于GOPATH。 github问题线程对此进行了更详细的讨论:https://github.com/golang/go/issues/26827
该线程已经发展出一种解决方法,该方法使用docker容器运行将GOPATH设置为开发树基础的godoc服务器。该godoc服务器将为您的开发树中的所有软件包提供文档,无论它们是否具有go.mod。
这是今天早上我刚刚在该线程中发布的解决方法的一个版本-修改$ devbase(或将其作为$ 1传递)以指向树的基部:
#!/bin/bash
set -x # optional
devbase=$HOME/gohack
port=6060
docker run \
--rm \
-e "GOPATH=/tmp/go" \
-p 127.0.0.1:$port:$port \
-v $devbase:/tmp/go/src/ \
--name godoc \
golang \
bash -c "go get golang.org/x/tools/cmd/godoc && echo http://localhost:$port/pkg/ && /tmp/go/bin/godoc -http=:$port"
您会注意到,我也在使用gohack工具-它为您管理go.mod中的“替换”行,因此即使未推送模块,导入也会找到您模块的本地版本到服务器了。否则,$ devbase没什么特别的,例如,将其指向$ HOME / src应该也可以正常工作。