問題:
你有一個提供介面並依賴的中央包提供這些介面的實作的其他包。然而,在中央套件中包含這些依賴套件會產生循環依賴,這是 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中文網其他相關文章!