• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    详解golang避免循环import问题(“import cycle not allowed”)

    前言

    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

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    您可能感兴趣的文章:
    • 对Golang import 导入包语法详解
    • go各种import的使用方法讲解
    • golang 之import和package的使用
    • MongoDB使用mongoexport和mongoimport命令,批量导出和导入JSON数据到同一张表的实例
    • golang中import cycle not allowed解决的一种思路
    • Golang报“import cycle not allowed”错误的2种解决方法
    • 如何解决django配置settings时遇到Could not import settings ''conf.local''
    • Golang import 导入包语法及一些特殊用法详解
    上一篇:Golang报“import cycle not allowed”错误的2种解决方法
    下一篇:golang中import cycle not allowed解决的一种思路
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    详解golang避免循环import问题(“import cycle not allowed”) 详解,golang,避免,循环,import,