Go可视化工具

statsviz


实时查看 Go 应用程序运行时统计信息(GC,MemStats 等)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package main

import (
"fmt"
"github.com/arl/statsviz"
"log"
"net/http"
"time"
)

func main() {
statsviz.RegisterDefault()
go func() {
log.Println(http.ListenAndServe("localhost:6060", nil))
}()

for {
fmt.Println(time.Now().UnixNano())
}
}

运行后,打开http://localhost:6060/debug/statsviz/


原理是使用 WebSocket 协议,定时将runtime数据发送给浏览器,浏览器接收到之后,利用 JS 绘制图表,展示出来。Go 核心代码如下:

用了gorilla这个websocket库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// sendStats indefinitely send runtime statistics on the websocket connection.
func sendStats(conn *websocket.Conn, frequency time.Duration) error {
tick := time.NewTicker(frequency)
defer tick.Stop()

stats := stats{GoVersion: runtime.Version()}
for range tick.C {
runtime.ReadMemStats(&stats.Mem)
stats.NumGoroutine = runtime.NumGoroutine()
if err := conn.WriteJSON(stats); err != nil {
return err
}
}

panic("unreachable")
}

参考自 为项目集成可视化实时运行时统计


statsview


通过这个 Runtime 统计信息可视化库学到了什么?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
package main

import (
"github.com/go-echarts/statsview"
"math/rand"
"strconv"
"time"
)

func main() {
go work()
mgr := statsview.New()

// Start() runs a HTTP server at `localhost:18066` by default.
mgr.Start()

// Stop() will shutdown the http server gracefully
// mgr.Stop()
}

func work() {
// Generate some allocations
m := map[string][]byte{}

for {
b := make([]byte, 512+rand.Intn(16*1024))
m[strconv.Itoa(len(m)%(10*100))] = b

if len(m)%(10*100) == 0 {
m = make(map[string][]byte)
}

time.Sleep(10 * time.Millisecond)
}
}

gmchart,go mod graph 可视化工具


go get -u github.com/PaulXu-cn/go-mod-graph-chart/gmchart

cd goProject

然后 go mod graph | gmchart 即可

如kratos项目:


go mod graph 可视化——gmchart


gomod,分析 Go项目三方依赖仓库 Star 、Fork 的工具


go install github.com/cfanbo/gomod@latest

cd goProject

然后 gomod 即可

Star 仓库的 Star 数量;如果统计数据超时则显示为 ?


Fork 仓库的 Fork 数量;如果统计数据超时则显示为 ?
Share 是否存在相同的仓库;如果引用了同一个仓库的多个包,则此列将显示 Y
Module 当前项目依赖的三方库名称
GitHub 三方库在 github.com 上的托管地址

可以通过多次按 s、 f、m 或g 键查看效果,如果要退出查看模式按 q 或 Esc键即可。 如果要访问仓库在 github.com 上的托管地址,直接 Enter 键即可; 如果要访问在 pkg.go.dev 网站的地址,直接按空格键 即可。

还可通过gomod github项目地址查看托管在 github.com 上的任何项目的信息