Go-Callvis est un outil de développement pour aider à visualiser le graphique d'appel d'un programme Go à l'aide de la vue interactive.
Le but de cet outil est de fournir aux développeurs un aperçu visuel d'un programme GO en utilisant les données de Graph et ses relations avec ses packages et types. Ceci est particulièrement utile dans les projets plus grands où la complexité du code beaucoup plus élevée ou lorsque vous essayez simplement de comprendre le code de quelqu'un d'autre.

Consultez le code source de l'image ci-dessus.
Il exécute l'analyse du pointeur pour construire le graphique d'appel du programme et utilise les données pour générer une sortie au format DOT, qui peut être rendue avec des outils Graphviz.
-graphviz )Pour installer Go-Callvis, exécuter:
# Latest release
go install github.com/ofabry/go-callvis@latest
# Development version
go install github.com/ofabry/go-callvis@masterAlternativement, cloner le référentiel et compiler le code source:
# Clone repository
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis
# Compile and install
make installPour utiliser la vue interactive fournie par un serveur Web qui sert des images SVG de packages focalisés, vous pouvez simplement exécuter:
go-callvis <target package>
Http Server écoute sur http: // localhost: 7878 / Par défaut, utilisez l'option -http="ADDR:PORT" pour modifier l'adresse du serveur http.
Pour générer une option d'utilisation de fichier de sortie unique -file=<file path> pour choisir la destination de fichier de sortie.
Le format de sortie par défaut est svg , utilisez l'option -format=<svg|png|jpg|...> pour choisir un format de sortie différent.
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.
Exécutez go-callvis -h pour répertorier toutes les options prises en charge.
Ici, vous pouvez trouver des descriptions pour différents types de sortie.
| Représente | Style |
|---|---|
focused | couleur bleue |
stdlib | couleur verte |
other | couleur jaune |
| Représente | Style |
|---|---|
exported | frontière audacieuse |
unexported | frontière normale |
anonymous | bordure en pointillé |
| Représente | Style |
|---|---|
internal | couleur noire |
external | couleur brune |
static | ligne continue |
dynamic | ligne en pointillés |
regular | Arrow simple |
concurrent | flèche avec cercle |
deferred | flèche avec diamant |
Voici un exemple pour le projet Syncthing.

Consultez plus d'exemples et les options de commande utilisées.
Rejoignez la chaîne # go-callvis sur gophers.slack.com. ( pas encore membre? Obtenez l'invitation)
Avez-vous trouvé des bogues ou avez-vous des suggestions?
Voulez-vous contribuer au projet?
L'objectif idéal de ce projet est de créer une application Web qui stockerait localement les données du graphique d'appel, puis fournirait un accès rapide des graphiques d'appel pour tout package de votre arborescence de dépendance. Au début, il afficherait une carte interactive des dépendances globales entre les packages, puis en sélectionnant un package particulier, il afficherait le graphique d'appel et fournirait diverses options pour modifier la sortie dynamiquement.