Golang中godoc的实用价值探讨
Golang中godoc的实用价值探讨 /吐槽
虽然我并不需要更多证据,但Go在2022年的状况进一步让我确信,它不过是谷歌(以及核心团队其他成员来自的地方)那些聪明但傲慢的开发者们(我特意使用这个词)抛到世界上的又一个面子工程。
具体来说,我引用(来自2011年3月31日的博客文章,由于链接限制以代码形式发布):
Go项目非常重视文档。
(来自2011年3月31日的博客文章:https://go.dev/blog/godoc)
博客顶部有一个指向2022年6月更新的链接:https://go.dev/doc/comment
好吧。
然而,这两个页面都没有(在直接页面上)提供清晰、简洁的说明,指导如何安装必要的工具来为自定义的**Go**模块实际创建文档。此外,如果文档如此重要,你可能会理所当然地问:
为什么我必须安装一个工具来创建文档,这独立于安装语言本身
(尤其是因为语言发行版中已经包含了其他工具)。
你问住我了——去问Go团队吧。
Go现在已经是1.18.3版本了。然而,在浪费了时间试图弄清楚为什么**godoc**不起作用之后,我在go 1.13的readme中发现了(页面上未注明日期;由于链接限制以代码形式发布):
godoc 和 go doc
godoc网络服务器不再包含在主二进制发行版中。要在本地运行godoc网络服务器,请先手动安装它:
go get golang.org/x/tools/cmd/godoc
godoc
所以,它很重要,但我们Go团队懒得把它包含在实际的发行版中——你自己去(动词"go")想办法解决吧。
更糟糕的是,在v1.18.3中,你实际上不能使用**get,除非你跳过其他一些为了在1.18.3中使用get**而必须的环节。(弄清楚这些晦涩的规则是什么,就留给读者作为练习了)
不过好吧。安装**godoc**:
C:\Users\Jack>go install golang.org/x/tools/cmd/godoc@latest
go: downloading golang.org/x/tools v0.1.11
go: downloading golang.org/x/sys v0.0.0-20211019181941-9d821ace8654
go: downloading golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f
go: downloading github.com/yuin/goldmark v1.4.1
go: downloading golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4
看起来安装成功了。
但它能用吗?不太可能。
作为一个以英语为母语的人,我想我理解这句话(来自Godoc: documenting Go code - The Go Programming Language)的意思,以及当我运行本段中粗体的命令时应该发生什么:
你自己的代码只需拥有如上所述的注释,就能呈现良好的文档。任何安装在$GOROOT/src/pkg内的Go包和任何GOPATH工作空间都已经可以通过godoc的命令行和HTTP接口访问,你可以通过-path标志指定额外的路径进行索引,或者直接在源代码目录中运行**“godoc .”**。
我真傻!这是输出(**sourcedir目录包含一个带有一些文档的.go文件、它的.mod文件,以及两个也包含.go和.mod**文件的子文件夹):
C:\GProjects\example\sourcedir>godoc .
Unexpected arguments. Use "go doc" for command-line help output instead. For example, "go doc fmt.Printf".
usage: godoc -http=localhost:6060
-goroot string
Go root directory (default "C:\\Program Files\\Go")
-http string
HTTP service address (default "localhost:6060")
-index
enable search index
-index_files string
glob pattern specifying index files; if not empty, the index is read from these files in sorted order
-index_interval duration
interval of indexing; 0 for default (5m), negative to only index once at startup
-index_throttle float
index throttle value; 0.0 = no time allocated, 1.0 = full throttle (default 0.75)
-links
link identifiers to their declarations (default true)
-maxresults int
maximum number of full text search results shown (default 10000)
-notes string
regular expression matching note markers to show (default "BUG")
-play
enable playground
-templates string
load templates/JS/CSS from disk in this directory
-timestamps
show timestamps with directory listings
-url string
print HTML for named URL
-v verbose mode
-write_index
write index to a file; the file name must be specified with -index_files
-zip string
zip file providing the file system to serve; disabled if empty
难以置信!(不过,根据痛苦地尝试使用其他面子工程的经验,这非常可信)。
虽然我没有尝试为所有标志设置值,但我确实尝试了具体使用
-http=localhost:6060(结果与上面相同)
-http=localhost:6060 -goroot .(在干净的磁盘上,你可以永远寻道——也就是说,服务器似乎启动了但挂起了):
C:\GProjects\example\sourcedir>godoc -v -http=localhost:6060 -goroot .
using module mode; GOMOD=C:\GProjects\example\sourcedir\go.mod
2022/06/29 12:23:00 newDirTree reading /favicon.ico: file does not exist
2022/06/29 12:23:00 Go Documentation Server
2022/06/29 12:23:00 version = go1.18.3
2022/06/29 12:23:00 address = localhost:6060
2022/06/29 12:23:00 goroot = .
2022/06/29 12:23:00 search index disabled
name space {
/:
gated(os(.), 20) /
/favicon.ico:
mapfs /favicon.ico
/lib/godoc:
mapfs /
/src/golang.org/x/sys:
gated(os(.), 20) /src/golang.org/x/sys
gated(os(C:\Users\Jack\go\pkg\mod\golang.org\x\sys@v0.0.0-20220624220833-87e55d714810), 20) /
/src/example\sourcedir:
gated(os(.), 20) /src/example\sourcedir
gated(os(C:\GProjects\example\sourcedir), 20) /
}
2022/06/29 12:23:00 starting HTTP server (and waiting for Godot...)
拜托,Go团队。你们能不能靠谱点。
需要说明的是,我愿意阅读手册,无论它写得多么糟糕或不一致,并且我承认我经常有阅读障碍的眼睛-大脑连接有时会看错。但是,一个被吹捧为基础且重要的功能无法开箱即用,这实在太过分了。
这充其量表明发布草率,往坏了说则暗示着无能。 /吐槽
话虽如此,对于那些看完吐槽的人,如果有人解决了这个特定问题,我将非常感谢任何指导。
更多关于Golang中godoc的实用价值探讨的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于Golang中godoc的实用价值探讨的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
godoc确实是一个强大的文档工具,但安装和使用方式在Go 1.13之后发生了变化。以下是具体解决方案:
1. 安装godoc
从Go 1.13开始,godoc需要单独安装:
go install golang.org/x/tools/cmd/godoc@latest
2. 正确运行godoc
godoc现在主要作为Web服务器运行,不再支持直接命令行查看单个包。正确用法:
# 启动本地文档服务器
godoc -http=:6060
# 或者指定GOPATH
godoc -http=:6060 -goroot=$GOPATH
然后在浏览器访问:http://localhost:6060
3. 查看自定义包的文档
对于你的项目,确保在项目根目录运行:
# 进入项目目录
cd C:\GProjects\example\sourcedir
# 启动服务器,godoc会自动索引当前目录
godoc -http=:6060
4. 使用go doc替代命令行查看
对于命令行查看,现在使用go doc命令:
# 查看当前包
go doc
# 查看特定函数
go doc fmt.Printf
# 查看包的所有内容
go doc -all fmt
5. 完整示例
假设有以下项目结构:
myproject/
├── go.mod
└── mypackage/
└── mycode.go
mycode.go:
// Package mypackage demonstrates documentation
package mypackage
// Add returns the sum of two integers
func Add(a, b int) int {
return a + b
}
查看文档:
# 命令行查看
go doc mypackage
go doc mypackage.Add
# Web界面查看
cd myproject
godoc -http=:6060
# 访问 http://localhost:6060/pkg/myproject/mypackage/
6. 解决常见问题
如果遇到权限或路径问题,尝试:
# 清理并重新安装
go clean -modcache
go install golang.org/x/tools/cmd/godoc@latest
# 使用完整路径
godoc -http=:6060 -goroot="C:\\GProjects\\example"
godoc的核心价值在于自动从代码注释生成规范的API文档,保持代码和文档同步。虽然安装方式有所变化,但功能依然完整可用。

