问题描述:
“imiport cycle not allow”–>这是今天我在goland中添加redis时遇到的一个问题,整体代码书写没有报错,但是debug就出现了这样的问题:
发现是由于导包时因为包和代码规划有些问题,出现了cache的包需要导入config包里面的配置信息,而config包里的init()初始化函数初始化redis需要redis逻辑包里面的启动,这就导致了两个包循环导用的情况:
尝试解决
golang检测出现循环导包的时候就会在编译阶段报错,通常是因为设计错误或包的规划问题:(package C
导入了package A
和package B
)
1 | import( |
而在package A
中导入了package C
,在package B
中导入了package C
或者说在package C
依赖于package A
和package B
的情况下,package A
依赖于package C
,同时package B依赖package C
,这个时候就会在编译时出现imiport cycle not allow
如何解决
由于我的想的是config包里定义的是总体的初始化读取配置,那么就在config文件中读取redis的配置信息,然后调用cache包的初始化逻辑,这样可以减少redis的内部包的定义和减少配置函数的定义
出现这种错误后,我就将redis的读取文件操作和初始化处理逻辑和需要用到的逻辑函数单独放在了cache包,debug–>成功!!!
如何避免以及出现了如何解决?
那么这个如果在设计之初规划好包是可以避免的,那难免也有出现了急待解决的时候,这里大概有两种比较好的思路:
定义接口
拆分包