Go-Callvis -это инструмент разработки, который помогает визуализировать график вызовов программы GO с использованием интерактивного представления.
Цель этого инструмента состоит в том, чтобы предоставить разработчикам визуальный обзор программы GO с использованием данных с графа вызовов и его отношений с пакетами и типами. Это особенно полезно в более крупных проектах, где сложность кода намного выше или когда вы просто пытаетесь понять код кого -то другого.

Проверьте исходный код для изображения выше.
Он выполняет анализ указателей, чтобы построить график вызовов программы и использует данные для генерации вывода в формате DOT, который может быть отображен с помощью инструментов GraphViz.
-graphviz )Чтобы установить go-callvis, запустите:
# Latest release
go install github.com/ofabry/go-callvis@latest
# Development version
go install github.com/ofabry/go-callvis@masterВ качестве альтернативы клонировать репозиторий и составить исходный код:
# Clone repository
git clone https://github.com/ofabry/go-callvis.git
cd go-callvis
# Compile and install
make installДля использования интерактивного представления, предоставленного веб -сервером, который обслуживает изображения SVG сфокусированных пакетов, вы можете просто запустить:
go-callvis <target package>
HTTP Server прослушивает http: // localhost: 7878/по умолчанию, используйте опцию -http="ADDR:PORT" , чтобы изменить адрес HTTP -сервера.
Чтобы сгенерировать единый выходной файл, опция -file=<file path> чтобы выбрать пункт назначения File.
Выходной формат по умолчанию в svg , используйте опцию -format=<svg|png|jpg|...> для выбора другого формата вывода.
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.
Запустите go-callvis -h чтобы перечислить все поддерживаемые варианты.
Здесь вы можете найти описания для различных типов вывода.
| Представляет | Стиль |
|---|---|
focused | синий цвет |
stdlib | зеленый цвет |
other | Желтый цвет |
| Представляет | Стиль |
|---|---|
exported | смелая граница |
unexported | нормальная граница |
anonymous | пунктирная граница |
| Представляет | Стиль |
|---|---|
internal | черный цвет |
external | коричневый цвет |
static | сплошная линия |
dynamic | пунктирная линия |
regular | Простая стрелка |
concurrent | Стрелка с кругом |
deferred | Стрелка с бриллиантом |
Вот пример для синхронизации проекта.

Проверьте больше примеров и используемые параметры команды.
Присоединяйтесь к #go-callvis-каналу на gophers.slack.com. ( еще не участник? Получите приглашение)
Вы нашли какие -нибудь ошибки или имели какие -то предложения?
Вы хотите внести свой вклад в проект?
Идеальная цель этого проекта - сделать веб -приложение, которое локально хранит данные о графе вызовов, а затем обеспечивает быстрый доступ к графикам вызовов для любого пакета вашего дерева зависимости. Сначала он покажет интерактивную карту общей зависимости между пакетами, а затем, выбрав конкретный пакет, он покажет график вызовов и предоставит различные параметры для динамического изменения вывода.