Golang中如何使用godoc展示"包内调用关系图"
Golang中如何使用godoc展示"包内调用关系图"
如何像包内调用关系图中描述的那样,使用godoc显示“包内调用关系图”?
我使用以下命令启动本地服务器,一切正常。但我就是找不到“包内调用关系图”在哪里。
$ GO111MODULE=off godoc -http=:6060 -analysis=type,pointer
非常感谢任何帮助!
2 回复
已解决。执行“指针分析”确实耗时过长,在我的笔记本电脑上大约需要4.5分钟。在终端中,直到“2021/03/16 15:04:28 指针分析运行中…”这条信息出现之前,hole包的“包内调用图”以及每个函数的信息都显示出来了,之后这些信息才消失。 而“-analysis=pointer”选项确实很高效。
更多关于Golang中如何使用godoc展示"包内调用关系图"的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
在Go 1.12及更高版本中,godoc工具已从标准工具链中移除,你需要单独安装并启用分析功能来查看包内调用关系图。
安装和启动步骤
1. 安装godoc工具
go install golang.org/x/tools/cmd/godoc@latest
2. 启动带有分析功能的godoc服务器
# 对于Go模块项目
godoc -http=:6060 -analysis=type,pointer
# 或者对于传统GOPATH项目
GO111MODULE=off godoc -http=:6060 -analysis=type,pointer
查看调用关系图的方法
启动服务器后,访问 http://localhost:6060,然后:
- 导航到具体包:找到你想要分析的包
- 查看包文档页面:点击进入包的详细文档
- 查找"Implements"部分:在包文档页面中,你会看到类似这样的部分:
Implements
sort.Interface
byName
byWeight
- 点击关系图链接:在"Implements"或"Call graph"部分,会有可点击的链接显示调用关系
示例:查看标准库的调用关系
访问 http://localhost:6060/pkg/net/http/,你会看到:
- Type analysis:显示类型实现关系
- Pointer analysis:显示指针分析结果
- Call graph:显示函数调用关系图
代码示例
假设你有以下包结构:
// mathutil/math.go
package mathutil
func Add(a, b int) int {
return a + b
}
func Multiply(a, b int) int {
return a * b
}
func Calculate(x, y int) int {
sum := Add(x, y)
return Multiply(sum, 2)
}
启动godoc服务器后,访问 http://localhost:6060/pkg/mathutil/,在"Call graph"部分可以看到:
Calculate调用Add和MultiplyAdd和Multiply是叶子函数
注意事项
- 分析需要时间:首次访问包时,godoc需要时间进行分析,大型包可能需要几秒钟
- 内存使用:
-analysis=pointer选项会增加内存使用 - 浏览器兼容性:关系图使用SVG格式,需要现代浏览器支持
如果仍然看不到调用关系图,确保:
- 使用最新版本的godoc工具
- 分析功能已正确启用(命令行参数正确)
- 包中有足够的函数调用关系可供分析

