28

似乎该godoc工具不支持 Go 模块

一个简单godoc -goroot=.的为项目文件提供服务,但它不会为包生成文档。我从项目源目录中对其进行了测试,其中还存储了go.modgo.sum模块文件。

如何为 Go 模块内的所有包生成文档 - 外部$GOPATH

Go 1.12的发行说明中写道,该godoc工具将不会包含在未来的 Go 版本中,并且只能go getGo 1.12之后使用。应该使用Gogo doc命令。但是,go doc不会生成“易于阅读”的 HTML 页面。是否有从输出 HTML 或 Markdown 的 Go 源代码生成文档的替代方法?

4

2 回答 2

9

问题不在于模块,而在于 GOPATH。有一个 github 问题线程更详细地讨论了这个问题:https ://github.com/golang/go/issues/26827

该线程已经发展出一种解决方法,它使用 docker 容器运行 godoc 服务器,并将 GOPATH 设置为开发树的基础。该 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 应该也能正常工作。

于 2019-10-02T18:59:45.227 回答
7

显然它已在这里修复https://github.com/golang/go/issues/33655

我所要做的就是升级到 1.14 版,然后godoc在我的目录中使用 go modules 运行。

godoc只要命令在模块模式下运行,该命令就应该在模块模式go下运行。所以godoc应该go env GOMOD在相同的环境和工作目录下运行,并解释结果。

如果结果go env GOMOD是一个空字符串,那么GOPATHmode 正在被使用,并且godoc会像过去那样表现,GOPATH它只会在GOPATH目录中查找。

于 2020-03-31T13:25:27.167 回答