go-callvis

Visualize call graph of a Go program using dot format.

Github stars Tracking Chart


Introduction

The purpose of this tool is to provide developers with a visual overview of a Go program using data from call graph
and its relations with packages and types. This is especially useful in larger projects where the complexity of
the code much higher or when you are just simply trying to understand code of somebody else.

Features

  • ? support for Go modules! :boom:
  • interactive view allowing quick switching between focused packages in web browser
  • focus specific package in the program
  • group functions by package and/or methods by type
  • filter packages to specific import path prefixes
  • omit various types of function calls

Output preview

main

Check out the source code for the above image.

How it works

It runs pointer analysis to construct the call graph of the program and
uses the data to generate output in dot format, which can be rendered with Graphviz tools.

Reference guide

Here you can find descriptions for various types of output.

Packages / Types, Represents, Style, ----------:, :-------------, focused, blue color, stdlib, green color, other, yellow color, ### Functions / Methods, Represents, Style, -----------:, :--------------, exported, bold border, unexported, normal border, anonymous, dotted border, ### Calls, Represents, Style, -----------:, :-------------, internal, black color, external, brown color, static, solid line, dynamic, dashed line, regular, simple arrow, concurrent, arrow with circle, deferred, arrow with diamond, ## Quick start

Requirements

Installation

go get -u github.com/TrueFurby/go-callvis
# or
git clone https://github.com/TrueFurby/go-callvis.git
cd go-callvis && make install

Usage

To use the interactive view provided by a web server that serves SVG images of focused packages, you can simply run:

go-callvis [OPTIONS] <main package>

HTTP server is listening on http://localhost:7878/ by default.

To generate a single output file use option -file=<file path> to choose output file destination. The output format defaults to svg, use option -format=<svg, png, jpg, ...> to pick a different output format.

Options

Usage of go-callvis:
  -debug
    	Enable verbose log.
  -file string
    	output filename - omit to use server mode
  -focus string
    	Focus specific package using name or import path. (default "main")
  -format string
    	output file format [svg, png, jpg, ...] (default "svg")
  -group string
    	Grouping functions by packages and/or types [pkg, type] (separated by comma)
  -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.
  -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.

Run go-callvis -h to list all supported options.

Examples

Here is an example for the project syncthing.

syncthing example

Check out more examples and used command options.

Community

Join #go-callvis channel at gophers.slack.com. (not a member yet? get invitation)

How to help

Did you find any bugs or have some suggestions?

  • Feel free to open new issue or start discussion in the slack channel.

Do you want to contribute to the project?

  • Fork the repository and open a pull request. Here you can find TODO features.

Roadmap

The interactive tool described below has been published as a separate project called goexplorer!

Ideal goal of this project is to make web app that would locally store the call graph data and then provide quick access of the call graphs for any package of your dependency tree. At first it would show an interactive map of overall dependencies between packages and then by selecting particular package it would show the call graph and provide various options to alter the output dynamically.

Main metrics

Overview
Name With Ownerondrajz/go-callvis
Primary LanguageGo
Program languageGo (Language Count: 2)
Platform
License:MIT License
所有者活动
Created At2016-09-03 11:31:46
Pushed At2025-01-04 18:11:32
Last Commit At2025-01-02 16:31:22
Release Count15
Last Release Namev0.7.1 (Posted on 2025-01-02 12:41:19)
First Release Namev0.1 (Posted on 2017-01-08 12:36:42)
用户参与
Stargazers Count6.2k
Watchers Count75
Fork Count432
Commits Count183
Has Issues Enabled
Issues Count157
Issue Open Count64
Pull Requests Count31
Pull Requests Open Count5
Pull Requests Close Count13
项目设置
Has Wiki Enabled
Is Archived
Is Fork
Is Locked
Is Mirror
Is Private