Maison >développement back-end >Golang >Pourquoi ne puis-je pas importer les packages internes de Go et quelles sont les alternatives ?

Pourquoi ne puis-je pas importer les packages internes de Go et quelles sont les alternatives ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-25 11:49:18886parcourir

Why Can't I Import Go's Internal Packages, and What Are the Alternatives?

Importation de packages internes dans Go : un voyage vers une visibilité restreinte

De nombreux développeurs Go rencontrent le message d'erreur énigmatique : "imports runtime/internal/atomic : utilisation du package interne pas autorisé." Cet article examine la justification de cette restriction et explore des approches alternatives pour gérer les packages internes dans Go.

La tension de la visibilité interne

Go adhère au principe des limites bien définies des packages. Cependant, les projets prennent inévitablement de l'ampleur, ce qui pose le défi d'organiser le code en plusieurs packages tout en préservant les dépendances entre modules. Traditionnellement, diviser une bibliothèque en packages internes les rendait accessibles au sein du projet mais cachés aux consommateurs externes.

Solution proposée par Go 1.4

Dans Go 1.4, une proposition visait à résoudre ce problème en introduisant une restriction de visibilité. Les packages contenant l'élément "interne" dans leur chemin seraient inaccessibles au code externe. Cette règle visait à maintenir l'encapsulation et à empêcher l'exposition accidentelle des API internes.

La réalité

Malgré la règle proposée, l'importation de packages internes depuis l'extérieur de leur arborescence de projet reste interdite. La conception des emballages de Go donne la priorité à la simplicité et à la maintenabilité, et il n'est pas anodin de mettre en œuvre une visibilité interne avec la plomberie du système d'emballage actuel.

Approches alternatives

Bien que l'importation directe d'emballages internes soit déconseillée, il Il existe des approches alternatives pour obtenir des fonctionnalités similaires :

  • Importations anonymes : Importer des packages avec des noms anonymes pour éviter toute collision avec des packages publics. Par exemple, _ "runtime/internal/atomic" importe efficacement le package sans exposer ses symboles.
  • Répertoire des fournisseurs : Utilisez un répertoire de fournisseurs pour gérer les packages tiers et contrôler la visibilité. Ceci peut être réalisé en important des packages à partir du sous-répertoire « interne » dans le répertoire du fournisseur.
  • Dépôts séparés : Pour les projets plus importants, envisagez de diviser les packages internes dans un référentiel distinct. Cela garantit l'encapsulation et empêche l'accès externe.

Conclusion

L'importation de packages internes dans Go n'est pas prise en charge par le langage et doit généralement être évitée. Les approches recommandées donnent la priorité à l'encapsulation tout en maintenant l'intégrité du système de packages de Go.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn