2022年12月


title: Golang循环依赖排查方法
date: 2022-12-13 11:2
createDate: 2022-12-13
tags: go
category: golang/

grammar_cjkRuby: true

一、简介

本文介绍如何通过技术手段排查Golang的循环依赖。

二、要点

  • 1、安装依赖库
  • 2、用命令生成视图

三、操作

1、安装依赖

  • 1、安装图片生成工具

    ## Ubuntu packages*
    sudo apt install graphviz -y
    ## Windows
    https://gitlab.com/api/v4/projects/4207231/packages/generic/graphviz-releases/7.0.4/windows_10_cmake_Release_graphviz-install-7.0.4-win64.exe
  • 2、安装代码检查工具

    go install github.com/kisielk/godepgraph@latest

    godepgraph 参数:

| 参数             | 缩写  | 类型    | 默认值   | 说明
|------------------|------|---------|---------|-------------------------------------------------------
| `nostdlib`       | `s`  | boolean | `false` | 忽略go的标准库
| `novendor`       | -    | boolean | `false` | 忽略vendor文件夹中的包
| `stoponerror`    | -    | boolean | `true`  | 遇到错误立刻停止
| `withgoroot`     | `d`  | boolean | `false` | 显示属于Go标准库的依赖关系
| `ignoreprefixes` | `p`  | string  | `""`    | 忽略指定前缀的包,多个之间用英文逗号分割
| `ignorepackages` | `i`  | string  | `""`    | 忽略指定的包,多个之间用英文逗号分割
| `onlyprefixes`   | `o`  | string  | `""`    | 只处理指定前缀的包,多个之间用英文逗号分割
| `tags`           | -    | string  | `""`    | 生成可执行文件时需要满足的标签列表,多个之间用英文逗号分割
| `horizontal`     | -    | boolean | `false` | 生成水平结构的依赖关系图(默认垂直结构)
| `withtests`      | `t`  | boolean | `false` | 包含测试包
| `maxlevel`       | `l`  | int     | `256`   | 生成图像的最大深度,默认256

2、生成视图

  • 1、Linux

    godepgraph -novendor -nostdlib -ignoreprefixes "github.com,go.uber.org,entgo.io,ariga.io" ./pkg/web | dot -Tsvg -o godepgraph.svg
  • 2、Windows

    godepgraph -novendor -nostdlib -ignoreprefixes "github.com,go.uber.org,entgo.io,ariga.io" ./pkg/web | & 'C:\Program Files\Graphviz\bin\dot.exe' -Tsvg -o godepgraph.svg

    图像:
    godepgraph

四、参考资料及附录

本文由 qingchuwudi 译制或原创,除非另有声明,在不与原著版权冲突的前提下,本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。

知识共享许可协议