详解golang避免循环import问题(“import cycle not allowed”)
作者:PHP点点通 时间:2024-05-22 10:19:30
前言
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
来源:http://ju.outofmemory.cn/entry/230115
标签:golang,循环,import
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
python3.5 + PyQt5 +Eric6 实现的一个计算器代码
2021-02-27 17:00:28
![](https://img.aspxhome.com/file/2023/7/124207_0s.png)
Golang异常控制处理程序错误流程
2024-02-04 15:55:28
C#连接db2数据库的实现方法
2024-01-19 07:00:51
详解DeBug Python神级工具PySnooper
2022-12-14 15:44:31
Python学习笔记_数据排序方法
2022-03-07 01:28:33
mysql5.x升级到mysql5.7后导入之前数据库date出错的快速解决方法
2024-01-22 10:09:17
学习Python爬虫的几点建议
2023-08-08 04:29:08
Web2.0视觉风格进化论 之二
2007-11-03 20:10:00
![](https://img.aspxhome.com/file/UploadPic/200711/3/2007113201853604s.jpg)
Pandas 实现分组计数且不计重复
2022-01-30 03:39:56
![](https://img.aspxhome.com/file/2023/2/80422_0s.jpg)
python 读取竖线分隔符的文本方法
2023-03-12 14:45:14
python 实现视频流下载保存MP4的方法
2021-09-13 06:31:38
Python常用类型转换实现代码实例
2022-05-20 06:03:43
利用SQL注入漏洞登录后台的实现方法
2024-01-18 10:03:44
![](https://img.aspxhome.com/file/2023/9/114959_0s.png)
使用python+poco+夜神模拟器进行自动化测试实例
2022-12-19 09:09:29
![](https://img.aspxhome.com/file/2023/8/92178_0s.jpg)
JS+ASP实现无刷新新闻列表方法
2007-08-22 12:44:00
浅谈pytorch中stack和cat的及to_tensor的坑
2022-12-14 11:53:23
使用python编写批量卸载手机中安装的android应用脚本
2022-07-04 19:41:27
python 中os模块os.path.exists()的用法说明
2022-04-30 01:22:26
Go语言算法之寻找数组第二大元素的方法
2023-06-24 16:19:03
PHP后台备份MySQL数据库的源码实例
2023-09-04 14:55:11