go-callvis is a development tool to help visualize call graph of a Go program using interactive view.
---
## 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
- click on package to quickly switch the focus using [interactive viewer](#interactive-viewer)
- focus specific package in the program
- group functions by package
- group methods by their receiver type
- filter packages to specific import path prefixes
- ignore calls to/from standard library
- omit various types of function calls
### Output preview
[](https://raw.githubusercontent.com/ofabry/go-callvis/master/images/main.png)
> Check out the [source code](examples/main) for the above image.
### How it works
It runs [pointer analysis](https://godoc.org/golang.org/x/tools/go/pointer) to construct the call graph of the program and
uses the data to generate output in [dot format](http://www.graphviz.org/content/dot-language), which can be rendered with Graphviz tools.
## Quick start
### Installation
#### Requirements
- [Go](https://golang.org/dl/) 1.19+
- [Graphviz](http://www.graphviz.org/download/) (optional, required only with `-graphviz` flag)
To install go-callvis, run:
```sh
# Latest release
go install github.com/ofabry/go-callvis@latest
# Development version
go install github.com/ofabry/go-callvis@master
```
Alternatively, clone the repository and compile the source code:
```sh
# Clone repository
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis
# Compile and install
make install
```
### Usage
#### Interactive viewer
To use the interactive view provided by a web server that serves SVG images of focused packages, you can simply run:
`go-callvis `
HTTP server is listening on [http://localhost:7878/](http://localhost:7878/) by default, use option `-http="ADDR:PORT"` to change HTTP server address.
#### Render static output
To generate a single output file use option `-file=` to choose output file destination.
The output format defaults to `svg`, use option `-format=