一、前言
golang为了加速编译,不允许包循环引用。通常来说,只要你的包规划得好,严格规范单向调用链(如控制层->业务层->数据层),一般不会出现包循环引用问题。当然现实业务往往不会这么理想,同层级之间的不同包经常需要互相引用,下面我就分享几种解决包循环引用的方案。
二、新建公共接口包(父包),将需要循环调用的函数或方法抽象为接口
- package_i
package package_i
type PackageAInterface interface {
PrintA()
}
type PackageBInterface interface {
PrintB()
}
- package_a
package package_a
import (
"cycle/package_i"
"fmt"
)
type PackageA struct {
B