web-dev-qa-db-fra.com

Quelle est la bonne pratique avec les espaces de travail Go?

Je commence juste à apprendre Go, et à lire le code existant pour apprendre «comment les autres le font». Ce faisant, l'utilisation d'un "espace de travail" actif, en particulier en ce qui concerne les dépendances d'un projet, semble être omniprésente.

Quelle (ou existe-t-il) une meilleure pratique commune concernant l’utilisation d’un ou de plusieurs espaces de travail Go (c'est-à-dire les définitions de $ GOPATH) lorsque vous travaillez sur divers projets Go? Devrais-je m'attendre à avoir un seul espace de travail Go qui s'apparente en quelque sorte à un référentiel central de code pour tous mes projets, ou le casser explicitement et configurer $ GOPATH lorsque je vais travailler sur chacun de ces projets virtualenv)?

41
heckj

Je pense qu'il est plus facile d'avoir un $GOPATH par projet, de cette façon, vous pouvez avoir différentes versions du même package pour différents projets et mettre à jour les packages si nécessaire.

Avec un référentiel central, il est difficile de mettre à jour un paquet car vous risqueriez de casser un projet non lié dans le même temps (si la mise à jour du paquet contient des modifications importantes ou de nouveaux bogues).

29
this.lau_

J'avais l'habitude d'utiliser plusieurs GOPATH - des dizaines, en fait. Passer d'un projet à un autre et gérer les dépendances était beaucoup plus difficile, car intégrer une mise à jour utile dans un espace de travail exigeait que je le fasse dans les autres. mais pas un autre. Fiasco.

Je viens maintenant de un GOPATH et je mets réellement tous mes projets de développement - Go ou pas - à l'intérieur. Avec un espace de travail central, je peux toujours conserver chaque projet dans son propre référentiel git (src/<whatever>) et utiliser git branching pour gérer les dépendances lorsque cela est nécessaire (dans la pratique, très rarement).

Ma recommandation: utilisez un seul espace de travail, voire deux (par exemple, si vous devez conserver, par exemple, un code de travail et un code personnel plus séparés, bien que la convention de dénomination du chemin d'accès au package recommandée le fasse pour vous).

27
Matt

Utiliser un seul GOPATH pour tous vos projets est très pratique, mais je trouve que ce n'est le cas que pour mes propres projets personnels.

J'utilise un GOPATH distinct pour chaque système de production que je gère car j'utilise des sous-modules git dans l'arborescence de répertoires de chaque GOPATH afin de geler les dépendances.

Donc, quelque chose comme:

~/code/my-project
- src
  - github.com
    + dependency-one
    + dependency-two
    - my-org
      - my-project
        * main.go
        + package-one
        + package-two
- pkg
- bin

En définissant GOPATH sur ~/code/my-project, il utilise les sous-modules dépendance Gend Depend-one et Depend-Two de ce projet au lieu d'utiliser des dépendances globales.

6
Collin Van Dyck

Essayez envirius (gestionnaire d'environnements virtuels universels) . Il permet de compiler n'importe quelle version de go et de créer un nombre quelconque d'environnements basés sur celle-ci. $GOPATH/$GOROOT dépendent de chaque environnement particulier.

De plus, cela permet de créer des environnements avec des langages mixtes (par exemple, python & go dans un environnement).

5
shorrty

Dans mon entreprise, j'ai créé Virtualgo pour rendre la gestion de plusieurs variables GOPATHs super facile. Quelques avantages par rapport à sa manipulation manuelle sont:

  • Basculement automatique sur la GOPATH correcte lorsque vous cd à un projet.
  • Il s'intègre bien aux outils de vente
  • Il définit également le nouveau GOBIN dans votre chemin afin que vous puissiez utiliser les exécutables installés à cet emplacement.
  • Votre GOPATH originale est toujours sauvegardée. Si un package n'est pas trouvé dans l'espace de travail spécifique au projet, il recherchera la variable principale GOPATH.
4
JelteF

Si vous définissez simplement GOPATH sur $HOME/go ou similaire et commencez à travailler, tout fonctionne comme prévu et est très simple.

Si vous faites beaucoup de GOPATHs avec beaucoup de répertoires bin pour beaucoup de projets avec beaucoup de dépendances communes dans divers états de fraîcheur, vous êtes, comme il devrait être évident, vous rendre les choses plus difficiles. C'est juste plus de travail.

Si vous constatez que vous devez parfois isoler certains éléments, vous pouvez créer une variable GOPATH distincte pour gérer cette situation.

Mais en général, si vous vous retrouvez à faire plus de travail, c'est souvent parce que vous choisissez de rendre les choses plus difficiles.

J'ai environ 100 projets accumulés au cours des quatre dernières années. Je travaille presque toujours dans GOPATH, qui est $HOME/go sur mes ordinateurs.

4
Dustin

Un espace de travail + godep est le meilleur pour moi. 

1
Fedir Tsapana

Vous voudrez peut-être essayer le package direnv.

https://direnv.net/

0
sjas