成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > Golang報(bào)“import cycle not allowed”錯(cuò)誤的2種解決方法

Golang報(bào)“import cycle not allowed”錯(cuò)誤的2種解決方法

熱門標(biāo)簽:浙江高速公路地圖標(biāo)注 地圖標(biāo)注的汽車標(biāo) 廣州呼叫中心外呼系統(tǒng) 西部云谷一期地圖標(biāo)注 學(xué)海導(dǎo)航地圖標(biāo)注 南通如皋申請(qǐng)開通400電話 中國(guó)地圖標(biāo)注省會(huì)高清 高德地圖標(biāo)注口訣 江西轉(zhuǎn)化率高的羿智云外呼系統(tǒng)

前言

相信不少 Gopher 在寫 Golang 程序都遇到過 import cycle not allowed 問題,本人最近研讀 go-ethereum 源碼時(shí),發(fā)現(xiàn)定義 interface 也能解決此問題, 還能解決連分包都不能解決的情況, 并且比分包更加簡(jiǎn)單快捷。下面逐個(gè)講解 分包 和 定義接口 這兩種方法。

1. 應(yīng)用場(chǎng)景

假設(shè)有如下使用場(chǎng)景:

A 是應(yīng)用程序的框架級(jí)結(jié)構(gòu)體,在 A 包含子模塊 B 和 C 的指針;

B 為了方便的使用應(yīng)用的其他子模塊(比如 C )功能,所以在其結(jié)構(gòu)體包含了 A 的指針;

C 要調(diào)用 A 包中的某個(gè)方法;

2. 代碼實(shí)現(xiàn)

其程序大致如下:

package a 代碼如下:

package a

import (
 "fmt"

 "github.com/ggq89/mutualdep/b"
 "github.com/ggq89/mutualdep/c"
)

type A struct {
 Pb *b.B
 Pc *c.C
}

func New(ic int) *A {
 a := A{
 Pc: c.New(ic),
 }

 a.Pb = b.New(a)

 return a
}

func Printf(v int) {
 fmt.Printf("%v", v)
}

package b 代碼如下:

package b

import (
 "github.com/ggq89/mutualdep/a"
)

type B struct {
 Pa *a.A
}

func New(a *a.A) *B {
 return B{
 Pa: a,
 }
}

func (b *B) DisplayC() {
 b.Pa.Pc.Show()
}

package c 代碼如下:

package c

import "github.com/ggq89/mutualdep/a"

type C struct {
 Vc int
}

func New(i int) *C {
 return C{
 Vc: i,
 }
}

func (c *C) Show() {
 a.Printf(c.Vc)
}

package a 依賴 package b 和 package c,同時(shí) package b 依賴 package a 、 package c 也依賴 package a 。

main 函數(shù)代碼如下:

package main

import "github.com/ggq89/mutualdep/a"

func main() {
 a := a.New(3)
 a.Pb.DisplayC()
}

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

import cycle not allowed
package main
    imports github.com/ggq89/mutualdep/a
    imports github.com/ggq89/mutualdep/b
    imports github.com/ggq89/mutualdep/a

3. 定義接口

現(xiàn)在的問題是:

A depends on B
B depends on A

對(duì)于 A struct 和 B struct 有彼此的指針這種相互依賴問題,可以使用定義接口的方法解決,具體步驟如下:

在 package b 中 定義 a interface ; 將 b 所有使用到結(jié)構(gòu)體 a 的變量和方法的地方全部轉(zhuǎn)化成 使用接口 a 的方法;在 a interface 中補(bǔ)充缺少的方法;

經(jīng)過上面的步驟處理后, package b 代碼如下:

package b

import (
 "github.com/ggq89/mutualdep/c"
)

type B struct {
 Pa a
}

type a interface {
 GetC() *c.C
}

func New(a a) *B {
 return B{
 Pa:a,
 }
}

func (b *B) DisplayC() {
 b.Pa.GetC().Show()
}

在 package a 中補(bǔ)充可能缺少的方法;

處理后, package a 中的代碼如下:

package a

import (
 "fmt"

 "github.com/ggq89/mutualdep/b"
 "github.com/ggq89/mutualdep/c"
)

type A struct {
 Pb *b.B
 Pc *c.C
}

func New(ic int) *A {
 a := A{
 Pc:c.New(ic),
 }

 a.Pb = b.New(a)

 return a
}

func (a *A)GetC() *c.C {
 return a.Pc
}

func Printf(v int) {
 fmt.Printf("%v", v)
}

4. 拆分包

再次編譯,提示如下:

import cycle not allowed
package main
    imports github.com/ggq89/mutualdep/a
    imports github.com/ggq89/mutualdep/b
    imports github.com/ggq89/mutualdep/c
    imports github.com/ggq89/mutualdep/a

現(xiàn)在是另一個(gè)相互依賴問題:

A depends on C
C depends on A

與前面的相互依賴不同,前面的依賴是由于 A struct 和 B struct 有彼此的指針導(dǎo)致的,屬于硬相互依賴;

而這里是由于 package c 中的方法調(diào)用 package a 中的方法引起的,屬于軟相互依賴;

  • 這種相互依賴可以通過將方法拆分到另一個(gè)包的方式來解決;在拆分包的過程中,可能會(huì)將結(jié)構(gòu)體的方法轉(zhuǎn)化為普通的函數(shù);

引入 package f , 將方法遷移到 f 中 :

package f

import "fmt"

func Printf(v int) {
 fmt.Printf("%v", v)
}

方法移動(dòng)到 package f 后, package a 的代碼如下:

package a

import (
 "github.com/ggq89/mutualdep/b"
 "github.com/ggq89/mutualdep/c"
)

type A struct {
 Pb *b.B
 Pc *c.C
}

func New(ic int) *A {
 a := A{
 Pc: c.New(ic),
 }

 a.Pb = b.New(a)

 return a
}

func (a *A) GetC() *c.C {
 return a.Pc
}

package c隨之改成調(diào)用package f,其代碼如下:

package c

import (
 "github.com/ggq89/mutualdep/a/f"
)

type C struct {
 Vc int
}

func New(i int) *C {
 return C{
 Vc: i,
 }
}

func (c *C) Show() {
 f.Printf(c.Vc)
}

現(xiàn)在依賴關(guān)系如下:

A depends on B and C
B depends on C
C depends on F

至此,兩種包相互依賴關(guān)系都得以解決。

5. 總結(jié)

對(duì)于軟相互依賴,利用分包的方法就能解決,有些函數(shù)導(dǎo)致的相互依賴只能通過分包解決;分包能細(xì)化包的功能;

對(duì)于硬相互依賴只能通過定義接口的方法解決;定義接口能提高包的獨(dú)立性,同時(shí)也提高了追蹤代碼調(diào)用關(guān)系的難度;

參考文章:

  • golang不允許循環(huán)import問題(“import cycle not allowed”) : https://www.jb51.net/article/145536.htm
  • golang解決import cycle not allowed的一種思路 : https://www.jb51.net/article/145539.htm

總結(jié)

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

您可能感興趣的文章:
  • 對(duì)Golang import 導(dǎo)入包語法詳解
  • go各種import的使用方法講解
  • golang 之import和package的使用
  • MongoDB使用mongoexport和mongoimport命令,批量導(dǎo)出和導(dǎo)入JSON數(shù)據(jù)到同一張表的實(shí)例
  • golang中import cycle not allowed解決的一種思路
  • 詳解golang避免循環(huán)import問題(“import cycle not allowed”)
  • 如何解決django配置settings時(shí)遇到Could not import settings ''conf.local''
  • Golang import 導(dǎo)入包語法及一些特殊用法詳解

標(biāo)簽:吐魯番 德宏 貴州 常州 東營(yíng) 曲靖 許昌 保定

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《Golang報(bào)“import cycle not allowed”錯(cuò)誤的2種解決方法》,本文關(guān)鍵詞  Golang,報(bào),import,cycle,not,allowed,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《Golang報(bào)“import cycle not allowed”錯(cuò)誤的2種解決方法》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于Golang報(bào)“import cycle not allowed”錯(cuò)誤的2種解決方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    99精品久久久久久中文字幕| www日韩中文字幕在线看| 日韩精品一区二区三区视频播放| 国产一区二区高清不卡| 国产精品亚洲四区在线观看| 日韩激情av在线免费观看| 精品一区二区在线观看视频| 在线视频三级| 国产男女无遮挡猛进猛出| 97视频在线播放| 91激情在线观看| 亚洲一区日韩| 亚洲精品一区二区三区在线观看| 性久久久久久久久久久久久久| 亚洲天堂小视频| 亚洲视频综合| 久久久久久亚洲| 欧美日韩成人综合天天影院| 日本精品网站| 欧美日韩在线观看首页| 波多野结衣50连登视频| 91精品国产综合久久婷婷香蕉| 国产91视频在线| 毛片网站免费哦| 手机在线看福利| 久色婷婷小香蕉久久| 中文字幕亚洲无线码a| 亚洲美女性囗交| 欧美另类69精品久久久久9999| av资源中文在线天堂| 无遮挡h肉3d动漫在线观看| 人人妻人人爽人人澡人人精品| 91精品国产高清久久久久久91裸体| 91老司机精品视频| 丝袜熟女一区二区三区| 色婷婷综合激情| 欧美在线播放一区二区| 少妇高潮喷水在线观看| 变态另类丨国产精品| 国产精品999.| 国产视频第二页| 最近日本中文字幕| 亚洲成av人影院在线观看| 亚洲伦理一区二区| 99视频精品全部免费看| 午夜男人天堂| 日本成人黄色| 午夜精品久久久久影视| 欧美日韩视频在线播放| 亚洲专区**| 欧州一区二区三区| 国产日韩欧美| 天天看天天操| 精品日韩av| 极品魔鬼身材女神啪啪精品| 欧美日本二区| 欧美色电影在线| 中文字幕亚洲在线| 亚洲欧洲精品视频| 侵犯稚嫩小箩莉h文系列小说| www.欧美日本韩国| 久久福利视频导航| 亚洲人成亚洲精品| 性欧美videos白嫩| 国产精品久久久久久久久久新婚| 四虎精品欧美一区二区免费| 老熟女高潮一区二区三区| 国产91精品精华液一区二区三区| 免费在线观看污| 亚洲激情免费观看| av中文字幕在线观看第一页| 亚洲国产天堂久久综合| wwwwww国产| 亚洲成人av在线播放| 91视频网址免费观看| 色综合久久天天综线观看| 久久久国产精品黄毛片| 国内国产精品久久| 国产经典一区二区三区| 在线视频福利| 国产在线拍揄自揄拍| 四虎4hu永久免费入口| 国产精品一区三区在线观看| 野花社区视频在线观看| 日韩欧美激情在线| 粉嫩av一区二区三区免费观看| av成人老司机| 国产 国语对白 露脸| 日韩在线视频线视频免费网站| 成人毛片高清视频观看| 无遮挡又爽又刺激的视频| 成人一区二区三区视频在线观看| 高清日韩一区| 最新中文字幕亚洲| 在线视频超级| 国产91精品捆绑调教| 免费黄色在线看| 国产日韩欧美综合在线| xvideos成人免费中文版| 操欧美老女人| 任我爽在线视频精品一| 亚洲永久精品ww.7491进入| 久久综合狠狠综合久久综青草| 亚洲av成人精品一区二区三区| 久久精品丝袜高跟鞋| 午夜精品久久久久久毛片| 精品一区二区三区视频日产| 国产又黄又粗的视频| 日本黄视频网站| 欧美**字幕| 亚洲久久在线观看| 69堂亚洲精品首页| 日韩国产一级片| 成年人视频在线免费观看| 国产一区白浆| 欧美日韩国产精品一区二区亚洲| 熟妇人妻久久中文字幕| 素人fc2av清纯18岁| 国产尤物一区二区三区| 91麻豆福利| 久久久久久有精品国产| 欧美成人h版在线观看| 邻居大乳一区二区三区| 麻豆av一区二区三区久久| 日韩福利片在线观看| 先锋影音男人资源| 成人黄色av片| 91精品国产一区二区人妖| 蜜臀a∨国产成人精品| 一区二区三区视频在线| 色哟哟一一国产精品| 91嫩草国产线观看亚洲一区二区| 欧美这里有精品| 久久久久久电影| 久久国产直播| 欧美激情综合五月色丁香| 丰满人妻一区二区三区免费视频| 亚洲午夜日本在线观看| 国产欧美日韩亚洲一区二区三区| 欧美一级国产精品| 91女神在线视频| 又黄又www的网站| 97久久超碰福利国产精品…| 一级片免费观看视频| 色99之美女主播在线视频| 日韩三级电影网址| 国产精品久久久一区麻豆最新章节| 色777狠狠综合秋免鲁丝| www视频在线看| 黄色片中文字幕| 五月天视频一区| 成人免费观看视频大全| 成人性生交大片免费看中文| 日本成人手机在线| 最新亚洲国产| 日韩欧美精品在线观看| 国产成人激情小视频| av免费网站在线| 欧美大交乱xxxxxbbb| 国产乱子伦视频一区二区三区| 日韩影视高清在线观看| 亚洲精品高潮| 日韩欧美在线播放视频| 国内精品一区二区| 色视频在线免费观看| 欧美三级韩国三级日本三斤| 亚洲国产精品一区二区久久恐怖片| 欧美日韩电影免费看| 一级视频在线观看视频在线啦啦| 午夜av区久久| 91在线高清观看| 亚洲色诱最新| 日韩高清免费在线| 欧美黄色性生活| 日韩美女中文字幕| 五月婷婷另类国产| 亚洲国产精品va在线看黑人动漫| 精品欧美色视频网站在线观看| 亚洲精品自在在线观看| 亚洲av无码一区二区乱子伦| 亚洲黄色免费视频| 天堂√在线观看一区二区| 伊人网在线免费观看| 九色porny丨国产首页在线| 亚洲男女性事视频| 久久久久黄色| www.91av...| 国内精品久久国产| 椎名由奈jux491在线播放| 欧美日韩综合一区二区三区| 91精品国产一区二区三区动漫| 久久福利影院| 日本女优北野望在线电影| a级片在线观看免费| 一起操在线播放| 国产精品免费久久久久| 五月婷婷中文字幕| 亚洲午夜视频在线观看| 日韩妆和欧美的一区二区| 无码人妻精品一区二区三区在线| 狠狠干五月天| 久久久高清视频| 热色播在线视频| 国产精品1000部啪视频| 久久精品视频免费| 欧美91视频| 国产精品一区二区久激情瑜伽| 色综合久久影院| 最新av在线| 国产九九视频一区二区三区| 久久精品99北条麻妃| 国产成人一区二区三区影院| 精品久久久久久综合日本欧美| 日韩欧美激情四射| 国产精品无码在线| 99爱在线观看| 鲁丝一区二区三区| 波多野结衣在线免费观看| 亚洲欧美国产日韩中文字幕| 久久av老司机精品网站导航| 日本h视频在线观看| 色狠狠一区二区三区香蕉| 精品精品导航| 久久精品男人天堂av| 日韩精品电影一区二区| 日韩在线一区二区视频| 最新av电影网站| 久久福利视频网| 欧美在线影院一区二区| 国产麻豆精品入口在线观看| 91精品久久久久久久久99蜜臂| 亚洲免费毛片| 亚洲视频国产视频| 欧美亚洲丝袜| 有色视频在线观看| 九色91视频| 妞干网在线免费视频| 鲁大师私人影院在线观看| 66m—66摸成人免费视频| 亚洲va久久久噜噜噜无码久久| 国产精品国产对白熟妇| 亚洲国产中文字幕| 久久性色av| 色香蕉成人二区免费| 欧美不卡在线一区二区三区| 精品国产乱码久久久久久久久| 老司机午夜激情| 亚洲产国偷v产偷v自拍涩爱| 韩国精品久久久999| 精品国产乱码久久久久酒店| 和岳每晚弄的高潮嗷嗷叫视频| 8x8ⅹ国产精品一区二区二区| 久久国产精品-国产精品| 国产精品影视| 欧美日韩国产在线| 欧美又粗又大又爽| 国产精品久久综合| 99aiav| √天堂资源地址在线官网| av在线观看地址| 国产精品一区二区久久精品爱涩| 99精品视频在线观看| 在线观看视频一区二区三区| 国产欧美日韩精品一区二区三区| 3d玉蒲团在线观看| 国产探花在线观看| 美女黄色片网站| 中文字幕天堂在线| 国产精品一区视频网站| 亚洲国产精品ⅴa在线观看| 蜜桃精品一区二区三区| 日韩欧美国产免费播放| 精精国产xxxx视频在线| 91免费精品国自产拍在线不卡| 美女福利视频在线| 裸体武打性艳史| 日韩五码电影| 少女频道在线观看免费播放电视剧| 精品一区二区三区日本| 久久精品久久99精品久久| 国产成人午夜精品影院观看视频| 久久精品一区蜜桃臀影院| 色妞www精品视频| 日本理论片午伦夜理片在线观看| 亚洲国产欧美一区二区三区丁香婷| 国产免费福利网站| jizz视频播放器| 亚洲在线视频一区| 欧美—级a级欧美特级ar全黄| 欧美日韩国产免费| 这里只有精品在线播放| 国产精品白嫩白嫩大学美女| wwwxxx亚洲| 国产精品伦理一区二区| 欧美videofree性高清杂交| 男女爱爱视频网站| 成人小说亚洲一区二区三区| a成人v在线| 色欲色香天天天综合网www| 久久久久国产精品视频| 久久久亚洲一区| 黄色网页免费看| 久草视频精品在线| 久久精品视频免费看| 国产精品免费成人| 国产精品激情| 波多野结衣在线免费观看| 国产精品视频久久久| 成人午夜免费视频| 日本久久电影网| 欧美午夜精品久久久久久超碰| 国产精品露脸自拍| 亚洲 国产 日韩 欧美| 午夜精品在线观看| 国产香蕉一区二区三区在线视频| 另类小说视频一区二区| 欧美乱强性伦xxxxx| 91久久在线播放| 日本a在线免费观看| 在线观看日韩av先锋影音电影院| 久久精品一二三四| 精品无码国产污污污免费网站| 自拍亚洲一区| 情侣偷拍对白清晰饥渴难耐| 欧美激情手机在线视频| 2019中文字幕免费视频| 国产精品一区二区不卡| 日本高清免费在线视频|