J'ai donc passé la meilleure partie de deux jours à essayer de comprendre celui-ci et peu importe ce que je fais, je ne peux pas faire redresser les choses. Voici ce qui se passe:
goapp sert code> ou goapp test -v ./src/lib1 code> en fonction de la manière dont j'ai mon jeu d'import. li>
ul> Si j'utilise "src / lib1" code> pour mon chemin d'importation, puis goapp servir code>. Mon application botte et fonctionne bien, mais lorsque je passe des tests, je reçois la défaillance suivante: p> xxx pré> de même, si j'utilise "mannequin / src / lib1" code> comme mon chemin, mes tests sont heureux et courent bien, mais sur goapp servir code> ing de l'application, je reçois maintenant: p> import (
"fmt"
"github.com/markhayden/SampleIssue/lib2"
)
3 Réponses :
appengine importe des choses sous le répertoire racine (c'est-à-dire où l'app.yaml est). Cela entraînera deux importations, une par appengine lorsqu'elle scanne les répertoires et une seconde par votre source lorsqu'elle est explicitement importée. p>
Vous avez deux choix: p>
Supprimez la partie de référentiel source de l'importation. Donc au lieu de
"github.com/blah/blah" ce serait "bla / bla". P>
Remarque: em> Ce genre est craint, car il offre votre apport de construction et de votre logiciel spécifique. Vous pouvez faire cela un peu mieux -Maybe-en utilisant Construire des contraintes . par exemple. Résumé: strong> pour les packages de sous-dossiers dans un projet Appengine n'inclut pas la partie "Source Repository" du chemin d'importation ou utilisez uniquement appengine à init () et déplacez tout votre autre code séparer les projets et utiliser des dépendances externes. p>
+ Construire! Appengine code> ou
+ Build! Appengine code> Pour inclure / Supprimer certains fichiers de la version en fonction de si vous ciblez appengine. p> li>
ul>
Tout d'abord, merci beaucoup d'avoir pris le temps de regarder les choses. Deuxièmement, j'ai lu «Comment écrire un code Go» à quelques reprises et organisé plusieurs projets en dehors de Appengine sans problème. Celui-ci est organisé un peu Wonky parce que j'ai essayé de résoudre le problème et de déplacer des choses autour. Quoi qu'il en soit, j'ai commencé à essayer votre méthode ci-dessus et d'avoir des problèmes. Ajouté ce que je vois à la post d'origine en raison de la longueur.
Pour que cela fonctionne avec votre structure de répertoire (ce que j'avais toujours corrigé pour être plus conventionnel), vous pouvez rendre votre correspondance à l'importation tout ce qui est après votre GoPath. par exemple. Importer "Échantilleux / app / src / lib1". Si je tire votre application localement en $ gopath / github.com / markhayden / et corrige vos déclarations d'importation pour être tout après mon GOPATH E.G. "github.com/markhayden/sampleSue/app/src/lib1" Alors tout fonctionne. Remarquez comment je devais inclure les annuaires / app / src / src. Cela dit, je tuerais les annuaires de l'application et de la SRC et de tout déplacer en SRC dans un dossier Échantilleux, alors votre importation sera beaucoup plus simple.
Yah j'ai changé la structure selon vos recommandations (ajouté une mise à jour ci-dessus). Alors maintenant, mon gopath est / users / markhayden / projects / go code> et ma structure de répertoire est affichée ici: f.cl.ly/items/1r2n46432k1z0j0w0t0n/dirtruct.jpg
Également mis à jour le repo GitHub avec les fichiers actuels pour "exemplesProject"
C'est essentiellement comme si j'utilise des chemins par rapport à mon gopathe $, les tests vont bien. Mais lorsque je sert à deux fois de charger deux fois, la thèse générant l'erreur. Sur le flipside, si j'utilise des chemins relatifs à mon application, il sert d'amende car les importations ne sont que chargées une fois que les tests échouent, car il ne peut pas trouver les dépendances nécessaires. Un peu envie d'un bug de test appengine? Mais vous dites que vous pouvez exécuter goapp servir code> à partir de l'application principale ainsi que goapp test -v code> de Dire le répertoire lib1?
Fwiw. Il suffit de tester sur une machine Linux que je suis positif est configuré par standards de Googles (identiques à votre Reco Matt) et il a le même problème exact.
OK, avec votre nouvelle organisation, j'ai reproduit les "conflits avec le même fichier importé de la question de GOPATH". Il semble que Appengine analyse les importations manuellement sous la racine (où le fichier App.YAML est) et ceux-ci sont conflictuels avec vos chemins explicitement importés. Ajout à la réponse ci-dessus ...
BTW - Je changerais votre titre de question sur "Google Golang appengine importations et conflits" ou quelque chose. Pour réfléchir plus précisément où cela est allé ... :)
Bon appel, aussi qui semble avoir travaillé dans l'exemple de l'application. Va déplacer mon projet principal vers la même configuration et voir si tout est bon (les doigts croisés). Merci donc tellement tellement de prendre le temps à ce sujet. Va certainement vous donner un crédit une fois que l'application principale est en cours d'exécution. Etre prêt!
Demandez-le maintenant. A fini par mettre tout dans un dossier maître, la structure recommandée peut donc tous vivre dans un seul repo, mais tout semble fonctionner. Devra retravailler quelques choses mais ne peut sérieusement pas assez merci.
J'essaie cette solution mais je ne peux pas le faire travailler .. Je me souviens que ceci est un problème pour la dernière fois, j'ai lancé un projet de moteurs Google App. Si quelqu'un a le temps de regarder mon problème, pouvez-vous voir mon message à ce sujet. Merci! Stackoverflow.com/Questtions/41677358/...
J'ai proposé une autre option qui n'est pas discutée ici et à mon avis est beaucoup plus facile à traiter (et à garder votre application moins appengine spécifique). Disons que vous avez le repo à Premièrement, déplacez le Suivant, où que vous exécutez votre fonction init pour l'App moteur, renommez-le à quelque chose comme de mon expérience, cela a résolu le problème et a rendu les choses beaucoup plus faciles. Je mettrai à jour cela si je rencontre des problèmes majeurs qui en font une mauvaise solution. P> p> github.com/blah/blah code> et maintenant, le dossier racine du repo définit votre serveur de moteur d'application. app.yaml code> et d'autres fichiers spécifiques du moteur d'application (pas .go code> fichiers) dans github.com/blah/appengine/ app.yaml code>. p> Func Run () {...} code>, puis dans github.com /Blah/blah/whatever.go Code> Écrivez quelque chose comme ceci: p>
Merci pour votre réponse. Certainement une solution beaucoup plus propre (et évite l'incompatibilité des espaces de noms).
Fonctionne parfaitement. J'ai essayé la réponse acceptée, mais je n'ai pas pu obtenir Atom d'accord avec la solution même si elle compilait. Cette solution compile toutefois et convient avec Atom (GO-Plus).
Je trouve une solution documentée ici plutôt plus approprié pour telle cas. Portez une attention particulière à Nobuild_files: ... Code> App.YAML Configuration.
@iswak dans ma défense Le fil que vous connaissez a été créé 10 mois après ma réponse, un peu comme ce commentaire est super différé;)
J'ai eu beaucoup de difficulté à suivre diverses réponses et à comprendre comment résoudre le problème. P>
Mais après beaucoup de recherches, je crois comprendre à la fois cause et solution: p>
L'outillage Google App-Builder fait du chemin-mugissement et la cause cela. Ils sont conscients de l'insecte mais pas d'ETA pour le réparer. P>
Résumé du problème:
Tous les fichiers .go En résumé, assurez-vous simplement que tous nos fichiers / packages sont
Je fais des services dans le même code Repo et je n'ai pas remarqué la légère différence de structure entre mes dossiers - c'était en effet mon problème. Merci Dewey. À titre de note latérale - cela ne semble que si le projet est auto-référençant, c'est-à-dire que vous liez les packages dans le même projet.