go package循环引用的产生和如何解决
我们在日常Go项目开发的时候,随着项目的需求越来越多,内容量也是越来越多,会导致包与包之间难免有很多依赖关系。
简单用图来表示就是:


下面 我们来看一个相互依赖的包代码实例:

run.go
A.go
C.go
B.go

遇到这种情况我们如何来处理这种互相依赖的问题呢。这边总结了三种解决办法:
1 将引用的包内信息,通过引入interface 改变循环依赖的问题:
2 将一些基础需要使用的结构体,单独放到不需要引用其他除基础包之外的包里
3 最不建议的 通过go:linkname的注释来避免导入包
其中第二种是比较推荐,也是实际工作中最方便的,因为实际生产中的依赖特别复杂,有时候第一种实现起来很麻烦,第三种也是最不推荐的。具体如何操作我在我自己的视频里做了具体如何实现。

