Maison >développement back-end >Golang >Comment utiliser correctement la substitution récursive dans go.mod de Golang ?
Lors de l'utilisation du go.mod de Golang, l'utilisation correcte de la substitution récursive est une question importante. L'éditeur PHP Yuzai vous propose quelques solutions. Le remplacement récursif fait référence à la méthode de remplacement d'un module par un répertoire local dans le fichier go.mod pour le débogage et la modification pendant le développement. Cependant, si le module remplacé dépend d'autres modules, cela peut poser certains problèmes. En utilisant correctement la substitution récursive, vous pouvez éviter ces problèmes et maintenir le bon fonctionnement des dépendances de votre projet. Dans cet article, nous expliquerons comment utiliser correctement la substitution récursive dans go.mod et fournirons quelques conseils et considérations pratiques.
Je souhaite une structure de projet comme celle-ci :
src/github.com/myname/myproject/ - tl: - constructor - someghing.go - go.mod: module github.com/myname/myproject/tl/constructor require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 require github.com/myname/myproject/tl/types/account v0.0.0 require github.com/myname/myproject/tl/types/auth v0.0.0 require github.com/myname/myproject/tl/types/bots v0.0.0 replace github.com/myname/myproject v0.0.0 => ./../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./../types replace github.com/myname/myproject/tl/types/account v0.0.0 => ./../types/account replace github.com/myname/myproject/tl/types/auth v0.0.0 => ./../types/auth replace github.com/myname/myproject/tl/types/channels v0.0.0 => ./../types/channels - crcs - someghing.go - go.mod: module github.com/myname/myproject/tl/crcs - functions - account - someghing.go - go.mod: module github.com/myname/myproject/tl/functions/account require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types - auth - someghing.go - go.mod: module github.com/myname/myproject/tl/functions/auth require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types - bots - someghing.go - go.mod: module github.com/myname/myproject/tl/functions/bots require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./../../types - someghing.go - go.mod: module github.com/myname/myproject/tl/functions require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs replace github.com/myname/myproject v0.0.0 => ./../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./../types - types - account - something.go - go.mod: module github.com/myname/myproject/tl/types/account require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./.. - auth - something.go - go.mod: module github.com/myname/myproject/tl/types/auth require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./.. - channels - something.go - go.mod: module github.com/myname/myproject/tl/types/channels require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../../crcs replace github.com/myname/myproject v0.0.0 => ./../../.. replace github.com/myname/myproject/tl/types v0.0.0 => ./.. - someghing.go - go.mod: module github.com/myname/myproject/tl/types require github.com/myname/myproject/tl/crcs v0.0.0 require github.com/myname/myproject v0.0.0 replace github.com/myname/myproject/tl/crcs v0.0.0 => ./../crcs replace github.com/myname/myproject v0.0.0 => ./../.. - something.go - go.mod: module github.com/myname/myproject [some external dependencies] require github.com/myname/myproject/tl/types v0.0.0 replace github.com/myname/myproject/l/types v0.0.0 => ./tl/types
Cela ne fonctionne pas. J'utilise l'ide de Jetbrains et il exécute go list sur tous les (sous)modules et m'indique l'erreur suivante :
go: github.com/myname/myproject/tl/[email protected] requires github.com/myname/myproject/tl/[email protected]: reading github.com/myname/myproject/tl/crcs/go.mod at revision tl/crcs/v0.0.0: unknown revision tl/crcs/v0.0.0
Je ne comprends pas pourquoi cela se produit, on dirait qu'il essaie d'extraire le module du référentiel même si tout est remplacé localement.
Je suis ouvert aux suggestions autres que la modification de la structure du projet. Je devrai pouvoir utiliser des choses comme account.sometype
à l'avenir, donc tout mettre dans un seul fichier sera pénible.
Contexte : je construis une bibliothèque mtproto pour télégramme qui a un mode tl où chaque "requête"/"classe" est dans son propre espace de noms (par exemple "compte", "canal") (ou dans un espace de noms global, par exemple je le suis functions
和 types
correspondant) (car il existe plus de 1900 de ces fonctions/classes, chacune avec son propre constructeur et ses propres paramètres, donc tout mettre dans un seul module sera difficile à utiliser)
Les fichiers du dossier tl sont des codes go générés automatiquement à partir du mode tl.
Merci à Dean d'avoir souligné que vous pouvez inclure plusieurs packages dans un module (comment ?). Cela a résolu mon problème tout en conservant la même structure.
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!