De bons conseils sur la façon d'éviter l'importation de cycle en Aller?
Je suis en train de travailler sur un projet pour un mois. La bonne chose est d'Aller est vraiment très efficace. Mais après un mois de développement, j'ai déjà reçu des milliers de lignes de code et de nombreux packages
. Pour éviter l'importation de cycle est un problème important pour moi que chaque fois que j'ai eu un cycle d'importation d'erreur, je n'ai aucune idée d'où le problème peut être la première fois.
L'Aller compilateur également très simple avis que toujours pas assez bon pour localiser problème rapidement comme: main.go:7:3: import cycle not allowed
. Il va seulement vous aider à savoir quel fichier qui peut provoquer le problème, mais rien de plus profondément. Depuis import
relation juste et deviennent de plus en plus complexe alors que le code se développe, je suis impatient de savoir comment éviter d'importation cycle de manière plus efficace en Aller. Toute aide est très appréciée.
Vous devez vous connecter pour publier un commentaire.
Montrera importer des dépendances de package à
<import-path>
- ou dans le répertoire courant si<import-path>
est laissé vide. Sinonespérons-le, montre quelques informations utiles dans votre cas. Voir aussi la sortie de
pour plus d'informations sur la liste aller de l'outil.
À compléter, sur jnml de la réponse (qui permet de "debug" références circulaires des problèmes), vous pouvez utiliser inversion de la dépendance à briser ces cycles, couplé avec l'injection de dépendance. Pour une application, j'essaie toujours de suivre les directives de l' Une Architecture Propre - voir ici pour un Aller-spécifiques, par exemple - et je trouve que Go "non-déclarative de la mise en œuvre" des interfaces (qui est, vous n'avez pas explicitement à dire
type MyStruct struct implements IfceSomething
) rend cela très simple.Donc, si vous avez des paquets
A -> B -> C -> A
, vous créezInterfaceA
(certains pertinentes nom, de toute évidence, de plus en plus liées au comportement que celui des paquets liés 🙂 dans le package C et faire dépendre de cette interface au lieu de sur Un package, et vous vous assurez d'Un package "met en œuvre" de cette interface.Ensuite vous avez juste à fournir une mise en œuvre concrète de A à C, à un certain moment (beaucoup de possibilités ici, j'ai l'habitude de le faire "coller" le code dans le paquet principal qui connaît toutes les dépendances).
Une autre option est de visualiser les dépendances de votre projet. Cela peut être fait avec des outils CLI godepgraph.
Vous pouvez l'installer avec:
Et ensuite l'utiliser pour trouver l'importation des cycles dans votre application à l'aide d'un autre outil CLI graphvis.
Avoir cet outil, vous pouvez visualiser les dépendances de package:
pour trouver cycles dans mon code: