欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解golang避免循環(huán)import問(wèn)題(“import cycle not allowed”)

 更新時(shí)間:2018年08月13日 11:15:07   作者:PHP點(diǎn)點(diǎn)通  
這篇文章主要給大家介紹了關(guān)于golang中不允許循環(huán)import問(wèn)題("import cycle not allowed")的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

前言

golang不允許循環(huán)import package ,如果檢測(cè)到 import cycle ,會(huì)在編譯時(shí)報(bào)錯(cuò),通常import cycle是因?yàn)樵O(shè)計(jì)錯(cuò)誤或包的規(guī)劃問(wèn)題。

以下面的例子為例,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()
}

就會(huì)在編譯時(shí)報(bào)錯(cuò):

import cycle not allowed
package github.com/mantishK/dep/a
  imports github.com/mantishK/dep/b
  imports github.com/mantishK/dep/a

現(xiàn)在的問(wè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é)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • golang文件服務(wù)器的兩種方式(可以訪問(wèn)任何目錄)

    golang文件服務(wù)器的兩種方式(可以訪問(wèn)任何目錄)

    這篇文章主要介紹了golang文件服務(wù)器的兩種方式,可以訪問(wèn)任何目錄,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解

    Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解

    這篇文章主要介紹了Go語(yǔ)言Zap庫(kù)Logger的定制化和封裝使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • golang實(shí)現(xiàn)openssl自簽名雙向認(rèn)證的詳細(xì)步驟

    golang實(shí)現(xiàn)openssl自簽名雙向認(rèn)證的詳細(xì)步驟

    這篇文章主要介紹了golang實(shí)現(xiàn)openssl自簽名雙向認(rèn)證的詳細(xì)步驟,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2024-03-03
  • Go語(yǔ)言func匿名函數(shù)閉包示例詳解

    Go語(yǔ)言func匿名函數(shù)閉包示例詳解

    這篇文章主要為大家介紹了Go語(yǔ)言func匿名函數(shù)閉包示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-06-06
  • Goland項(xiàng)目使用gomod配置的詳細(xì)步驟

    Goland項(xiàng)目使用gomod配置的詳細(xì)步驟

    Goland是一個(gè)用于Go語(yǔ)言開(kāi)發(fā)的IDE,Goland的項(xiàng)目結(jié)構(gòu)與Go語(yǔ)言的項(xiàng)目結(jié)構(gòu)相似,下面這篇文章主要給大家介紹了關(guān)于Goland項(xiàng)目使用gomod配置的詳細(xì)步驟,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • GO語(yǔ)言基礎(chǔ)入門(mén)第一個(gè)go程序解讀

    GO語(yǔ)言基礎(chǔ)入門(mén)第一個(gè)go程序解讀

    這篇文章主要為大家介紹了GO語(yǔ)言基礎(chǔ)入門(mén)的第一個(gè)go程序解讀,下面來(lái)帶大家進(jìn)入Go語(yǔ)言世界helloworld的大門(mén)吧,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-11-11
  • 初識(shí)Golang?Mutex互斥鎖的使用

    初識(shí)Golang?Mutex互斥鎖的使用

    在學(xué)習(xí)操作系統(tǒng)的時(shí)候,我們應(yīng)該都學(xué)習(xí)過(guò)臨界區(qū)、互斥鎖這些概念,用于在并發(fā)環(huán)境下保證狀態(tài)的正確性。在?Go語(yǔ)言?里面互斥鎖是?sync.Mutex?,我們本篇文章就來(lái)學(xué)習(xí)下為什么要使用互斥鎖、如何使用互斥鎖,以及使用時(shí)的常見(jiàn)問(wèn)題
    2022-10-10
  • 深入string理解Golang是怎樣實(shí)現(xiàn)的

    深入string理解Golang是怎樣實(shí)現(xiàn)的

    這篇文章主要為大家介紹了深入string理解Golang是怎樣實(shí)現(xiàn)的原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-04-04
  • 一文詳解Go語(yǔ)言中切片的底層原理

    一文詳解Go語(yǔ)言中切片的底層原理

    在Go語(yǔ)言中,切片作為一種引用類(lèi)型數(shù)據(jù),相對(duì)數(shù)組而言是一種動(dòng)態(tài)長(zhǎng)度的數(shù)據(jù)類(lèi)型,使用的場(chǎng)景也是非常多,所以本文主要來(lái)和大家聊聊切片的底層原理,需要的可以參考一下
    2023-06-06
  • Go泛型實(shí)戰(zhàn)教程之如何在結(jié)構(gòu)體中使用泛型

    Go泛型實(shí)戰(zhàn)教程之如何在結(jié)構(gòu)體中使用泛型

    這篇文章主要介紹了Go泛型實(shí)戰(zhàn)教程之如何在結(jié)構(gòu)體中使用泛型,根據(jù)Go泛型使用的三步曲提到的:類(lèi)型參數(shù)化、定義類(lèi)型約束、類(lèi)型實(shí)例化我們一步步來(lái)定義我們的緩存結(jié)構(gòu)體,需要的朋友可以參考下
    2022-07-07

最新評(píng)論