问题:
你有一个提供接口并依赖于的中央包提供这些接口的实现的其他包。然而,在中央包中包含这些依赖包会产生循环依赖,这是 Go 不允许的。
标准库解决方案:
自定义注册表解决方案:
选择最佳解决方案:
理想方法取决于具体要求:
代码示例对于自定义注册表解决方案:
// Package pi defines an interface I. package pi type I interface { // Some method. DoSomething() } // Package pa implements I with type A. package pa import "pi" type A struct{} func (a *A) DoSomething() { // Some implementation. } // Package pb implements I with type B. package pb import "pi" type B struct{} func (b *B) DoSomething() { // Some implementation. } // Package pf provides a factory to create instances of I. package pf import ( "pi" "pa" "pb" ) // NewClient returns an instance of I based on a flag. func NewClient(flag string) pi.I { switch flag { case "a": return &pa.A{} case "b": return &pb.B{} default: panic("Invalid flag") } }
以上是如何在不创建循环依赖的情况下注册Go包?的详细内容。更多信息请关注PHP中文网其他相关文章!