go doc能查标准库包、导出函数、结构体方法及当前模块自定义包;不能查未导出符号或未安装的第三方包,且必须在模块根目录执行。

go doc 能查什么、不能查什么
go doc 是 Go 官方内置命令,不依赖网络,直接读取本地源码注释生成文档。它能查标准库包(如 fmt)、导出函数(如 fmt.Printf)、结构体方法(如 time.Time.Add),也能查你当前模块里的自定义包(前提是该包有 // Package xxx 注释且在 go.mod 同级或子目录下)。
但它查不了未导出符号(小写开头的函数/字段),也查不了第三方包——除非你已用 go install 或 go get 安装过(此时 go doc -u github.com/sirupsen/logrus 才生效)。常见错误是:在非模块根目录执行 go doc mypkg,结果报错“no such package”,本质是路径没对、模块没识别。
go doc 常见用法与参数陷阱
基础查法很简单:go doc fmt 看包概览,go doc fmt.Sprintf 看函数签名和注释。但几个参数容易被忽略:
-
-src:加它会显示函数源码(不是文档),适合快速跳转实现逻辑,比如go doc -src fmt.Println -
-all:只对本地包有效,能列出未导出项,但输出极长,日常慎用 -
grep配合:查某个关键词更高效,例如go doc net/http | grep -A3 "ListenAndServe",避免翻屏 - 别用
godoc命令:Go 1.21+ 已弃用独立的godoc二进制,现在统一走go doc;若还装着旧版godoc,建议卸载,否则终端里两个命令行为不一致
本地 Web 文档服务怎么起、怎么用
想获得类似官网 pkg.go.dev 的浏览体验,启动本地 HTTP 服务最实用:
执行 go tool doc -http=:6060(注意:不是 godoc,也不是 go doc -http,Go 1.22+ 统一为 go tool doc)。浏览器打开 http://localhost:6060 即可。
Colly 是一个用于 Go 语言的快速开源爬取和爬虫框架。它适用于从简单的页面提取到异步爬虫处理大量页面集合,支持请求回调和结构化解析。
这个服务有几个关键点:
- 它只索引你
GOPATH和GOPROXY下已下载/安装的包,没go install过的第三方库不会出现 - 端口冲突时换一个,比如
go tool doc -http=:8080,但别用 80(需 root 权限) - 关闭服务只需 Ctrl+C,进程退出即停,不残留后台任务
- 它不支持搜索框内模糊匹配,得靠左栏导航或 URL 手动拼路径,比如
http://localhost:6060/pkg/fmt
为什么 flag.PrintDefaults() 的 help 看起来很简陋
原生 flag 包的 flag.PrintDefaults() 输出格式固定、无换行、无缩进,这是设计使然,不是 bug。比如你在 flag.String("config", "", "配置文件路径\n支持 YAML/TOML") 里加了 \n,help 里只会显示成一整行乱码。
真正的问题在于:它不保存“是否必填”“默认值含义”“环境变量映射”这些信息,全靠你手写 usage 字符串。如果项目需要分组、子命令或 Markdown 格式 help,必须换方案:
- 用
cobra:它是事实标准,cmd.Short和cmd.Long分离摘要与详情,cmd.Args自动补参数说明,--help开箱即用 - 手写 help:在
main()开头检查os.Args是否含--help或-h,命中就fmt.Println一段格式化字符串,然后os.Exit(0);其余 flag 定义照常,flag.Parse()仍要调用,不然后续逻辑拿不到值
别指望 go doc 或本地 Web 服务能帮你生成命令行 help——它们只管 API 文档,不管 CLI 交互文案。这部分得自己控制,而且越早定好格式,后期维护成本越低。
golang免费学习笔记(深入):立即使用
在学习笔记中,你将探索golang的核心概念和高级技巧!










