如何使用godoc和go模块一起提供文档?

时间:2019-02-28 20:44:36

标签: go documentation documentation-generation go-modules

似乎godoc工具不了解Go modules

一个简单的godoc -goroot=.用于提供项目文件,但不会生成软件包的文档。我从projects源目录进行了测试,该目录还存储了go.modgo.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源代码生成文档的替代方法?

2 个答案:

答案 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应该也可以正常工作。