Maison >développement back-end >Golang >Comment enregistrer des packages Go sans créer de dépendances cycliques ?
Problème :
Vous disposez d'un package central qui fournit des interfaces et dépend de d'autres packages qui offrent des implémentations de ces interfaces. Cependant, l'inclusion de ces packages dépendants dans le package central crée une dépendance cyclique, ce que Go ne permet pas.
Solutions de bibliothèque standard :
Solution de registre personnalisé :
Choisir la meilleure solution :
L'approche idéale dépend d'exigences spécifiques :
Exemple de code pour Solution de registre personnalisé :
// 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") } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!