详解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
0
投稿

猜你喜欢

  • python3.5 + PyQt5 +Eric6 实现的一个计算器代码

    2021-02-27 17:00:28
  • 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
  • Pandas 实现分组计数且不计重复

    2022-01-30 03:39:56
  • 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
  • 使用python+poco+夜神模拟器进行自动化测试实例

    2022-12-19 09:09:29
  • 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
  • asp之家 网络编程 m.aspxhome.com