您现在的位置是:网站首页> 编程资料编程资料
详解golang避免循环import问题(“import cycle not allowed”)_Golang_
2023-05-26
441人已围观
简介 详解golang避免循环import问题(“import cycle not allowed”)_Golang_
前言
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 cycle not allowed”错误的2种解决方法_Golang_
- golang新手们容易犯的3个错误总结_Golang_
- 详解Go 语言中的比较操作符_Golang_
- go语言实现聊天服务器的示例代码_Golang_
- 浅析Go语言版本的forgery_Golang_
- golang中使用mongo的方法介绍_Golang_
- golang 40行代码实现通用协程池_Golang_
- golang利用unsafe操作未导出变量-Pointer使用详解_Golang_
- golang编程入门之http请求天气实例_Golang_
- 使用golang获取linux上文件的访问/创建/修改时间_Golang_
