go doc要求严格匹配路径和目录:查标准库需完整包名如net/http.HandleFunc,本地包须在模块根目录运行,注释须紧贴声明且首字母大写,-cmd查命令工具,-src看源码片段。

go doc 不是“查不到”,而是没输对路径或没进对目录——它不猜、不推导、不自动补全,只认你敲的每一个字符。
查标准库函数必须带完整包路径
比如想看 http.HandleFunc,直接输 go doc HandleFunc 或 go doc http.HandleFunc 都会失败。前者因为没指定包,后者因为 http 包本身不导出 HandleFunc,它在 net/http 里。
-
go doc net/http.HandleFunc✅ 正确:包名 + 符号名,中间用斜杠 -
go doc net/http✅ 查整个包,列出所有导出项 -
go doc bytes.Buffer✅ 查类型,不是go doc Buffer - 输错包名(如把
strings写成string)或符号名(大小写敏感),go doc直接报no such package或no such symbol
查命令行工具得加 -cmd
gofmt、go、vet 这些都属于 cmd/xxx 下的 main 包,go doc 默认跳过它们——不是漏了,是故意隐藏。
-
go doc -cmd gofmt✅ 查gofmt工具说明(不用写cmd/gofmt) -
go doc -cmd go✅ 查go命令本身 -
go doc cmd/gofmt❌ 无效:路径写法不对,且没加-cmd - 自定义的
main包(比如你自己写的命令行程序)无法用-cmd查到,-cmd只作用于标准库cmd/子目录
本地包文档查不到?先确认模块根目录和注释格式
查自己写的包时,go doc mypkg 返回空或报错,大概率不是命令问题,而是环境或注释没到位。
立即学习“go语言免费学习笔记(深入)”;
- 必须在模块根目录下运行(即当前路径含
go.mod文件),否则退化为旧版 GOPATH 模式,行为不可靠 - 包注释必须是紧邻
package xxx上方的// Package xxx行,不能有空行,不能写在行尾 - 函数/类型注释必须紧贴声明上方,首行必须与符号名完全一致(如
// HTTPError对应type HTTPError) - 未导出符号(小写开头)默认不显示,加
-u才能看到,但仅限本地包
想看源码片段?别忘了 -src
go doc 默认只显示签名和注释,不展示实现逻辑。但加 -src 后能快速看到函数体前几行,对确认参数顺序、接收者类型、是否内联等很实用。
-
go doc -src fmt.Println✅ 显示Println定义处上下文(不是完整文件) -
go doc -src time.Now✅ 可看出它是func() Time,且调用了底层系统调用 -
-src对内建函数(如len、cap)无效——它们没 Go 源码,得查go help builtins - 不加
-src时若注释为空,先检查注释是否符合规范,而不是怀疑命令失效
最常被忽略的其实是注释位置和模块路径——go doc 的逻辑极简,它不帮你纠错,只忠实地呈现你组织好的源码结构。写对注释、进对目录、输对路径,它就立刻给出答案;错一处,它就沉默。


















