打破 Go 中的导入循环
在 Go 中开发时,你可能会遇到一个包依赖于另一个包的导入循环,这反过来取决于第一个。当包错综复杂地交织在一起,导致循环依赖时,就会出现这种情况。
特定循环
考虑以下示例:
在view.go中,doThings方法尝试访问action.注册map,创建一个循环,因为action依赖于view。这种情况特别具有挑战性,因为每个包都需要访问另一个包的功能。
解决循环
1。分析依赖关系:
确定包之间的核心关系,识别导致循环的具体依赖关系。在这种情况下,视图依赖于操作包来进行视图操作,而操作需要访问视图类型。
2.引入抽象:
考虑引入抽象层来分离依赖关系。一种方法可能是创建两个包都实现的中间接口。这使得它们能够在没有直接依赖的情况下进行通信。
3.重构代码组织:
重新组织包,使它们依赖于独立的模块。例如,创建一个包含 action.Register 映射和 View 类型的新包。然后,操作包和视图包都将依赖于这个公共模块。
4。注入:
将依赖项注入到对象或包中,而不是通过导入直接访问它们。该技术可以防止紧密耦合并实现灵活性和可测试性。例如,视图包可以接收一个接口作为其构造函数的参数,该接口可以由操作包实现。
一般原则
避免导入循环在 Go 中,请考虑以下原则:
以上是如何打破 Go 中的导入周期:解决循环依赖的指南的详细内容。更多信息请关注PHP中文网其他相关文章!