Heim >Backend-Entwicklung >Golang >Wie registriere ich Go-Pakete, ohne zyklische Abhängigkeiten zu erstellen?
Problem:
Sie haben ein zentrales Paket, das Schnittstellen bereitstellt und davon abhängt andere Pakete, die Implementierungen dieser Schnittstellen anbieten. Durch die Aufnahme dieser abhängigen Pakete in das zentrale Paket entsteht jedoch eine zyklische Abhängigkeit, die Go nicht zulässt.
Standardbibliothekslösungen:
Benutzerdefinierte Registrierungslösung:
Auswahl der besten Lösung:
Der ideale Ansatz hängt von den spezifischen Anforderungen ab:
Codebeispiel für Benutzerdefinierte Registrierungslösung:
// 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") } }
Das obige ist der detaillierte Inhalt vonWie registriere ich Go-Pakete, ohne zyklische Abhängigkeiten zu erstellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!