Go 中的循环依赖检测工具 —— go-cyclic
go-cyclic 循环依赖解决工具
- 问题描述
- 什么时候会出现循环依赖?
- go-cyclic 简单用法
- 快速开始
问题描述
作为一个 Go 开发者,经常会在大型项目中遇到包的循环依赖问题。
如果 Golang 出现循环依赖,那么会在编译时抛出异常。
什么时候会出现循环依赖?
如果有两个包:package a 和 package b。当在包a依赖包b,包b依赖包a时,就会产生循环依赖。真实情况可能会更复杂一些。例如,如包a依赖包b,包b依赖包c,包c又依赖包a时,形成一个环。
import cycle not allowed
而且如果项目很大的时候,一个包下面有很多 .go 文件,只提示包与包的循环引用(如上图),是很难定位到哪个 .go 文件和哪个 .go 文件直接进行了循环引用,难以排查。
go-cyclic 简单用法
github地址:https://github.com/elza2/go-cyclic (欢迎各位大佬提 pr)
go-cyclic 可以用来检查项目是否存在循环依赖,并且可以定位到具体的 .go 文件。帮助快速定位循环问题。
快速开始
go install github.com/elza2/go-cyclic@latest
# path 路径要设置为 go.mod 文件所在的路径.
go-cyclic gocyclic --dir .path
# success output.
Success. Not circular dependence.# failed output.
Failed. 1 circular dependence chains were found.┌---→ app.go
┆ ↓
┆ routes.go
┆ ↓
└--- handler.go
Go 中的循环依赖检测工具 —— go-cyclic相关推荐
- Unity3d+GameFramework:资源分析,资源依赖,循环依赖检测
资源依赖 先生成Resource 根据ResourceCollection.xml Resource resource = Resource.Create(name, variant, fileSys ...
- 面试:讲一讲Spring中的循环依赖
前言 Spring中的循环依赖一直是Spring中一个很重要的话题,一方面是因为源码中为了解决循环依赖做了很多处理,另外一方面是因为面试的时候,如果问到Spring中比较高阶的问题,那么循环依赖必定逃 ...
- spring自动装配依赖包_解决Spring自动装配中的循环依赖
spring自动装配依赖包 我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服 ...
- 解决Spring自动装配中的循环依赖
我认为这篇文章是在企业应用程序开发中使用Spring的最佳实践. 使用Spring编写企业Web应用程序时,服务层中的服务量可能会增加. 服务层中的每个服务可能会消耗其他服务,这些服务将通过@Auto ...
- 面试必杀技,讲一讲Spring中的循环依赖
本系列文章: 听说你还没学Spring就被源码编译劝退了?30+张图带你玩转Spring编译 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configu ...
- Spring中的循环依赖
目录 一.什么是循环依赖? 二.Bean的生命周期 2.1 Spring Bean 的生命周期 2.2 Bean 的生成步骤 三.三级缓存 3.1三个缓存分别有什么作用 四.思路分析 4.1 为什么 ...
- 一起来踩踩 Spring 中这个循环依赖的坑!
作者:Mythsman blog.mythsman.com/post/5d838c7c2db8a452e9b7082c/ 1. 前言 2. 典型场景 3. 什么是依赖 4. 什么是依赖调解 5. 为什 ...
- Spring中的循环依赖及解决,2021Java精选面试实战总结整理
那么在创建B类的Bean的过程中,如果B类中存在一个A类的a属性,那么在创建B的Bean的过程中就需要A类对应的Bean,但是,触发B类Bean的创建的条件是A类Bean在创建过程中的依赖注入,所以这 ...
- java 循环依赖_java – 如何在Gradle中解决循环依赖
我正在将Java项目从Ant迁移到Gradle.我认为最好的解决方案是使用Gradle的多项目支持,但我找不到摆脱循环依赖的方法. 原始项目设置为具有以下布局: - project/ - common ...
最新文章
- jpgraph中文使用手册之文本和字体控制教程
- “斐波那契数列”的两种算法
- 天津大学计算机考研真题,天津大学计算机科学与技术考研真题
- 【EI/Scopus检索】第六届电子技术与信息科学国际学术会议诚邀您投稿参会!
- C++11 多线程 基础
- Linux对象文件是个啥东东
- 直播将是所有企业必须做的
- python连接数据库mysql失败_解决python连接mysql报错问题
- JSON数据写入和解析
- 【python快速入门】—唐宇迪课程笔记
- Js中字符串转Json与Json对象转字符串
- sha256是什么算法,sha256的安全性,sha256算法详解
- 小乌龟SVN合并分支到主干、合并主干到分支,工具操作
- 一个完整的性能测试流程
- python 中英文 分离_利用Python将文本中的中英文分离方法
- 网页端下载喜马拉雅音频
- 大组合数取模hdu5698 瞬间移动
- android adb 模拟长按,adb 模拟长按电源键
- 渗透H5棋牌游戏-棋牌游戏开发
- 看完这个,你还觉得SOME/IP测试难吗?
热门文章
- 美斯坦福大学成立以人为本AI研究院,李飞飞将领导
- 卓胜微:国产替代泡沫破灭
- 一个好锅,等于拥有一个家庭的灵魂~
- OFDM中分析不同频偏(CFO)对通信链路的误码率影响仿真分析
- 【关于游戏中多人交互业务无回调写法的2种方案】1.xdb 2.world服+只读redis+队列
- 论文阅读笔记-后门攻击及防御
- 质量小议22 -- 多少分合适
- csdn简单设置字体颜色
- Python学习之np.random.normal()函数
- 你真的知道css三种存在样式(外联样式、内部样式、内联样式)的区别吗?