前言
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
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
- 原画壁纸及美图第217期,无水印可自取
- 原画壁纸及美图第218期,无水印可自取
- 张学友《24K金CD日本压碟 爱火花》[WAV+CUE][470MB]
- 王琪《全网醉火的神曲 可可托海的牧羊人》[WAV+CUE][620MB]
- 刀郎《辉煌十年绝版珍藏 3CD》[WAV/分轨][2.2GB]
- 三国谋定天下拍卖怎么玩 游戏拍卖场玩法介绍
- 哈迪斯2材料收集图文攻略 黑帝斯2材料在哪里找
- 鸣潮白芷声骸怎么选择 白芷声骸搭配及词条选择攻略
- 《鸡械绿洲》死机第二次无法继续问题解决方法
- 《夜族崛起》评测:再访恶魔城
- 《印蒂卡》评测:魔鬼和上帝都是你
- [ABC唱片]-《邓丽君—忆君集》[K2-114][K2CD][WAV+CUE]
- [ABC唱片]-《西电之声—人声》[HDS-182][6N纯银镀膜]WAV+CUE
- [ABC唱片]-《雪莉—非常雪莉》[HDS-072][6N纯银镀膜]WAV+CUE
- 《歌手2024》发文:将根据歌手档期进行后续邀请