国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Golang > 正文

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

2020-04-01 18:54:50
字體:
供稿:網(wǎng)友

前言

golang不允許循環(huán)import package ,如果檢測到 import cycle ,會在編譯時報錯,通常import cycle是因為設(shè)計錯誤或包的規(guī)劃問題。 

以下面的例子為例,package a依賴package b,同事package b依賴package a 

package aimport ( "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 bimport ( "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 itype Aprinter interface { PrintA()}

讓package b import package i 

package bimport ( "fmt" "github.com/mantishK/dep/i")func RequireA(o i.Aprinter) { o.PrintA()}

引入package c 

package cimport ( "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í)價值,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網(wǎng)的支持。 


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 科尔| 昔阳县| 江孜县| 登封市| 铜鼓县| 汉沽区| 赫章县| 天长市| 绥化市| 闵行区| 富宁县| 山东省| 塘沽区| 彰化市| 阿坝| 宽城| 宁都县| 唐河县| 昆明市| 保靖县| 商河县| 南平市| 泊头市| 阿勒泰市| 黑山县| 安福县| 伊宁县| 开江县| 镇远县| 健康| 巴彦淖尔市| 墨脱县| 平顶山市| 合阳县| 商河县| 郧西县| 岳普湖县| 彝良县| 吴桥县| 元谋县| 奉化市|