详解golang避免循环import问题(“import cycle not allowed”)
时间:2022-06-25 05:32:12 编辑:袖梨 来源:一聚教程网
前言
golang不允许循环import package ,如果检测到 import cycle ,会在编译时报错,通常import cycle是因为设计错误或包的规划问题。
以下面的例子为例,package a依赖package b,同事package b依赖package a
package a import ( "fmt" "github.com/mantishK/dep/b" ) type A struct { } func (a A) PrintA() { fmt.Println(a) } func NewA() *A { a := new(A) return a } func RequireB() { o := b.NewB() o.PrintB() }
package b:
package b import ( "fmt" "github.com/mantishK/dep/a" ) type B struct { } func (b B) PrintB() { fmt.Println(b) } func NewB() *B { b := new(B) return b } func RequireA() { o := a.NewA() o.PrintA() }
就会在编译时报错:
import cycle not allowed
package github.com/mantishK/dep/a
imports github.com/mantishK/dep/b
imports github.com/mantishK/dep/a
现在的问题就是:
A depends on B
B depends on A
那么如何避免?
引入package i, 引入interface
package i type Aprinter interface { PrintA() }
让package b import package i
package b import ( "fmt" "github.com/mantishK/dep/i" ) func RequireA(o i.Aprinter) { o.PrintA() }
引入package c
package c import ( "github.com/mantishK/dep/a" "github.com/mantishK/dep/b" ) func PrintC() { o := a.NewA() b.RequireA(o) }
现在依赖关系如下:
A depends on B
B depends on I
C depends on A and B
相关文章
- 我的世界附魔等级上限怎么修改指南 高等级武器附魔教程 04-27
- 我的世界蜜蜂怎么养殖 蜂蜜获取途径一览 04-27
- 开放空间琳怎么培养 开放空间琳泽西培养攻略大全 04-27
- 我的世界基础物品合成大全 实用道具制作指南 04-27
- 我的世界瞬间伤害药水怎么制作 强力战斗药水配方介绍 04-27
- 开放空间诗怎么培养 开放空间诗歌爱瑠培养攻略大全 04-27