Comment puis-je ouvrir des fichiers par rapport à mon GOPATH?

Je suis en utilisant io/ioutil de lire un petit fichier texte:

fileBytes, err := ioutil.ReadFile("/absolute/path/to/file.txt")

Et qui fonctionne très bien, mais ce n'est pas exactement le portable. Dans mon cas, les fichiers que je veux ouvrir sont à mon GOPATH, par exemple:

/Users/matt/Dev/go/src/github.com/mholt/mypackage/data/file.txt

Depuis le data dossier promenades droit à côté du code source, j'aimerais juste préciser le chemin d'accès relatif:

data/file.txt

Mais ensuite, j'obtiens cette erreur:

de panique: ouvert data/file.txt: aucun fichier ou répertoire de

Comment puis-je ouvrir des fichiers à l'aide de leur chemin d'accès relatif, surtout s'ils vivent à côté de mon code?

(Remarque que ma question est plus précisément sur l'ouverture de fichiers par rapport à la GOPATH. Ouverture de fichiers en utilisant un chemin relatif dans le jeu de Go est aussi facile que de donner le chemin d'accès relatif au lieu d'un chemin d'accès absolu; les fichiers sont ouverts par rapport à la binaire compilé répertoire de travail. Dans mon cas, je veux ouvrir les fichiers par rapport à l'endroit où le binaire a été compilé. Avec le recul, c'est une mauvaise décision de conception.)

  • Le GOPATH n'a pas un grand sens une fois que votre programme est compilé, et encore moins quand vous le distribuer.
  • Ce que vous semblez vouloir ressemble plus à certains intégration des fichiers dans votre programme compilé.
  • Une sorte de... sauf que je veux les fichiers de données distinct de la source. Les fichiers de données sont vitales pour les fonctionnalités du programme. Donc quand quelqu'un tire vers le bas de mon code source (avec les fichiers de données le long de côté) et compile et s'exécute, les fichiers de données sont chargées à l'aide d'un chemin d'accès relatif, car ils existent à proximité de la source code, ou près de l'endroit où le programme est en cours d'exécution.
  • Le binaire compilé devrait avoir aucune dépendance sur l'emplacement des fichiers source, mais ce serait bien si il y avait un moyen de créer un exécutable bundle qui contient une copie des ressources externes sur les paquets peuvent dépendre.
  • Ça sonne bien pour moi... je suis un peu nouveau pour Aller, et mon approche typique pour cela (comme Python ou PHP) est de regrouper les fichiers de données avec le code source et de référence relativement. Donc, pour Aller, ma vraie question pourrait être: comment puis-je accéder à ces ressources externes? (Si elles sont manquantes, bien sûr, j'avais d'agir en conséquence.)
  • c'est que ce fileembed-aller ne? (bitbucket.org/rj/fileembed-go)
  • Voici une question connexe sur le regroupement des ressources qui peut être suffisant, mais ce n'est pas ma méthode de prédilection dans mon cas: stackoverflow.com/questions/13904441/... - ou celui-ci: stackoverflow.com/q/9443418/1048862

InformationsquelleAutor Matt | 2013-06-12