Go面试题更新 2026-08-05

在 Go 语言中,有哪些方法可以获取当前程序中 goroutine 的数量?请给出具体的实现方式。

技术原理问题排查Go

考察说明

考察对 Go 运行时内存布局和调试手段的理解。

回答思路

  1. 【回答框架 1】通过 runtime.NumGoroutine() 函数可以直接返回当前程序中所有 goroutine 的数量,包括正在运行和阻塞的。
  2. 【回答框架 2】另一种方式是通过 pprof 接口获取,在程序中导入 net/http/pprof 后,访问 /debug/pprof/ 页面可以看到 goroutine 的堆栈信息,包括数量。
  3. 【回答框架 3】也可以通过 runtime/pprof 包,调用 pprof.Lookup("goroutine") 获取 Profile 对象,然后用 WriteTo 方法将信息写入文件,再通过 go tool pprof 分析。
  4. 【关键点 1】runtime.NumGoroutine() 是最直接的 API。
  5. 【关键点 2】pprof 可以提供更详细的 goroutine 堆栈信息。
  6. 【关键点 3】在生产环境中,可利用 pprof 进行性能分析。
  7. 【易错点 1】NumGoroutine() 返回的是瞬时数量,可能随时变化。
  8. 【易错点 2】不能依赖 goroutine 数量来推断资源泄漏,需要结合堆栈和业务逻辑分析。