golang不允许循环导入包,如果检测到进口周期,会在编译时报错,通常进口周期是因为设计错误或包的规划问题。
以下面的例子为例,包一个依赖包b,同事包b依赖包一个
包一个 导入( “fmt” "github.com/mantishK/dep/b” ) 输入一个struct { } func(一)不要(){ fmt.Println (a) } func NewA () * { 答:=new () 返回一个 } func RequireB () { o:=b.NewB () o.PrintB () }
方案b:
包b 导入( “fmt” "github.com/mantishK/dep/a” ) B型结构{ } func (b b) PrintB () { fmt.Println (b) } func新手()* B { b:=new (b) 返回b } func RequireA () { o:=a.NewA () o.PrintA () }
就会在编译时报错:
进口周期不允许
引用>
包github.com/mantishK/dep/a
,进口github.com/mantishK/dep/b
,进口github.com/mantishK/dep/a现在的问题就是:
取决于 包我 {Aprinter接口类型 不要把() }
让包b导入包我
包b 导入( “fmt” "github.com/mantishK/dep/i” ) func RequireA (o i.Aprinter) { o.PrintA () }引入包c
包c 导入( "github.com/mantishK/dep/a” "github.com/mantishK/dep/b” ) func PrintC () { o:=a.NewA () b.RequireA (o) }现在依赖关系如下:
取决于B
引用>
取决于我
A和B C取决于
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
详解golang避免循环导入问题(“进口周期不允许”)