O Go-CallVis é uma ferramenta de desenvolvimento para ajudar a visualizar o gráfico de chamada de um programa GO usando a visualização interativa.
O objetivo desta ferramenta é fornecer aos desenvolvedores uma visão visual de um programa GO usando dados do gráfico de chamadas e suas relações com pacotes e tipos. Isso é especialmente útil em projetos maiores, onde a complexidade do código muito maior ou quando você está simplesmente tentando entender o código de outra pessoa.

Confira o código -fonte da imagem acima.
Ele executa a análise de ponteiro para construir o gráfico de chamada do programa e usa os dados para gerar saída no formato DOT, que pode ser renderizado com as ferramentas GraphViz.
-graphviz sinalizador)Para instalar o Go-callVis, execute:
# Latest release
go install github.com/ofabry/go-callvis@latest
# Development version
go install github.com/ofabry/go-callvis@masterComo alternativa, clone o repositório e compile o código -fonte:
# Clone repository
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis
# Compile and install
make installPara usar a visualização interativa fornecida por um servidor da Web que serve imagens SVG de pacotes focados, você pode simplesmente executar:
go-callvis <target package>
O servidor HTTP está ouvindo http: // localhost: 7878/por padrão, use opção -http="ADDR:PORT" para alterar o endereço do servidor HTTP.
Para gerar um único arquivo de saída, use a opção -file=<file path> para escolher o destino do arquivo de saída.
O formato de saída é padrão para svg , use opção -format=<svg|png|jpg|...> para escolher um formato de saída diferente.
Usage of go-callvis:
-debug
Enable verbose log.
-file string
output filename - omit to use server mode
-cacheDir string
Enable caching to avoid unnecessary re-rendering.
-focus string
Focus specific package using name or import path. (default "main")
-format string
output file format [svg | png | jpg | ...] (default "svg")
-graphviz
Use Graphviz's dot program to render images.
-group string
Grouping functions by packages and/or types [pkg, type] (separated by comma) (default "pkg")
-http string
HTTP service address. (default ":7878")
-ignore string
Ignore package paths containing given prefixes (separated by comma)
-include string
Include package paths with given prefixes (separated by comma)
-limit string
Limit package paths to given prefixes (separated by comma)
-minlen uint
Minimum edge length (for wider output). (default 2)
-nodesep float
Minimum space between two adjacent nodes in the same rank (for taller output). (default 0.35)
-nointer
Omit calls to unexported functions.
-nostd
Omit calls to/from packages in standard library.
-rankdir
Direction of graph layout [LR | RL | TB | BT] (default "LR")
-skipbrowser
Skip opening browser.
-tags build tags
a list of build tags to consider satisfied during the build. For more information about build tags, see the description of build constraints in the documentation for the go/build package
-tests
Include test code.
-version
Show version and exit.
Execute go-callvis -h para listar todas as opções suportadas.
Aqui você pode encontrar descrições para vários tipos de saída.
| Representa | Estilo |
|---|---|
focused | cor azul |
stdlib | cor verde |
other | cor amarela |
| Representa | Estilo |
|---|---|
exported | borda ousada |
unexported | borda normal |
anonymous | borda pontilhada |
| Representa | Estilo |
|---|---|
internal | cor preta |
external | Cor marrom |
static | linha sólida |
dynamic | linha tracejada |
regular | Arrow simples |
concurrent | seta com círculo |
deferred | seta com diamante |
Aqui está um exemplo para a sincronização do projeto.

Confira mais exemplos e opções de comando usadas.
Junte-se ao canal #go-callvis em gophers.slack.com. ( ainda não é um membro? Obtenha convite)
Você encontrou algum bug ou teve algumas sugestões?
Você quer contribuir para o projeto?
O objetivo ideal deste projeto é criar um aplicativo da Web que armazenaria localmente os dados do gráfico de chamadas e forneça acesso rápido aos gráficos de chamada para qualquer pacote da sua árvore de dependência. No começo, ele mostraria um mapa interativo das dependências gerais entre os pacotes e, ao selecionar um pacote específico, ele mostraria o gráfico de chamadas e forneceria várias opções para alterar a saída dinamicamente.