Go   发布时间:2022-04-09  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Golang中的“Mutual”包导入大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以在Golang中执行类似“相互”包导入的操作?

让我们说例如我有两个包,A和B,功能AFunc和BFunc,BFunc2

package A
import "B"

func AFunc() {
    //do stuff but also use
    B.BFunc()
}

package B
import "A"

func BFunc() {
    //do foo
}

func BFunc2() {
    //do different stuff but also use
    A.AFunc()
}

有没有办法实现这一点,而不使用第三个包作为“桥梁”?

编辑:
为了澄清这个问题,这当然不可能通过“简单地”来实现,因为编译器将抛出导入循环不允许错误.问题是,是否有更清洁或更成熟的方法解决这个问题,然后建立一个“桥梁包”?

解决方法

interface应该是一个明显的答案:只要两个软件包都提出具有一组通用函数的接口,它就允许:

> packageB使用A中的函数(导入A)
> packageA从B调用函数而不必导入B:所有需要传递的B实例实现A中定义的接口:这些实例将视图作为A对象.
从这个意义上讲,packageA忽略了packageB的存在.

这也在“Cyclic dependencies and interfaces in golang”的评论中说明.

例如,io在其Copy() function中接受一个’Writer'(可以是一个文件或其他知道如何写的文件),并完全忽略os(.File)

大佬总结

以上是大佬教程为你收集整理的Golang中的“Mutual”包导入全部内容,希望文章能够帮你解决Golang中的“Mutual”包导入所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: