91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

詳解golang避免循環import問題(“import cycle not allowed”)

發布時間:2020-10-07 14:36:21 來源:腳本之家 閱讀:561 作者:PHP點點通 欄目:編程語言

前言

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對億速云的支持。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南投县| 古丈县| 滁州市| 库尔勒市| 吴旗县| 南乐县| 台安县| 澎湖县| 老河口市| 汾西县| 星子县| 新龙县| 和顺县| 汝南县| 芦山县| 册亨县| 天镇县| 句容市| 阿荣旗| 桐乡市| 曲沃县| 漠河县| 鄂尔多斯市| 两当县| 白玉县| 新沂市| 邢台市| 叙永县| 惠安县| 屏东市| 梓潼县| 句容市| 四川省| 漳州市| 安西县| 南雄市| 中超| 枣阳市| 峨边| 宿松县| 开平市|