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,然后:

  1. 导航到具体包:找到你想要分析的包
  2. 查看包文档页面:点击进入包的详细文档
  3. 查找"Implements"部分:在包文档页面中,你会看到类似这样的部分:
Implements
    sort.Interface
        byName
        byWeight
  1. 点击关系图链接:在"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 调用 AddMultiply
  • AddMultiply 是叶子函数

注意事项

  1. 分析需要时间:首次访问包时,godoc需要时间进行分析,大型包可能需要几秒钟
  2. 内存使用-analysis=pointer 选项会增加内存使用
  3. 浏览器兼容性:关系图使用SVG格式,需要现代浏览器支持

如果仍然看不到调用关系图,确保:

  • 使用最新版本的godoc工具
  • 分析功能已正确启用(命令行参数正确)
  • 包中有足够的函数调用关系可供分析
回到顶部