Golang循环依赖排查方法
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
图像:
四、参考资料及附录
[[译]Go中的循环依赖:如何解决这个问题][101] 薯条的编程修养 2022-07-31
原文:Import Cycles in Golang: How To Deal With Them Jogendra January 3 2021
- github.com/kisielk/godepgraph
- graphviz.org
_
本文由 qingchuwudi 译制或原创,除非另有声明,在不与原著版权冲突的前提下,本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 进行许可。