詳解golang避免循環(huán)import問題(“import cycle not allowed”)
前言
golang不允許循環(huán)import package ,如果檢測到 import cycle ,會在編譯時報錯,通常import cycle是因為設(shè)計錯誤或包的規(guī)劃問題。
以下面的例子為例,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
現(xiàn)在的問題就是:
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)
}
現(xiàn)在依賴關(guān)系如下:
A depends on B
B depends on I
C depends on A and B
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
基于Go+OpenCV實現(xiàn)人臉識別功能的詳細(xì)示例
OpenCV是一個強(qiáng)大的計算機(jī)視覺庫,提供了豐富的圖像處理和計算機(jī)視覺算法,本文將向你介紹在Mac上安裝OpenCV的步驟,并演示如何使用Go的OpenCV綁定庫進(jìn)行人臉識別,需要的朋友可以參考下2023-07-07
golang gorm 計算字段和獲取sum()值的實現(xiàn)
這篇文章主要介紹了golang gorm 計算字段和獲取sum()值的實現(xiàn)操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12
Golang實現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的示例詳解
這篇文章主要為大家詳細(xì)介紹了Golang實現(xiàn)Json轉(zhuǎn)結(jié)構(gòu)體的方法,文中的示例代碼講解詳細(xì),對學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下2023-02-02

