Comprendre le GOPATH

introduction

Cet article vous expliquera ce qu'est leGOPATH, comment il fonctionne et comment le configurer. Il s'agit d'une étape cruciale pour la configuration d'un environnement de développement Go, ainsi que pour comprendre comment Go trouve, installe et construit les fichiers source. Dans cet article, nous utiliseronsGOPATH pour faire référence au concept de structure de dossier dont nous allons parler. Nous utiliserons$GOPATH pour faire référence à la variable d'environnement que Go utilise pour trouver la structure des dossiers.

UnGo Workspace est la façon dont Go gère nos fichiers source, les binaires compilés et les objets mis en cache utilisés pour une compilation plus rapide plus tard. Il est généralement conseillé, et également conseillé, de n’avoir qu’un seul espace de travail Go, bien qu’il soit possible d’avoir plusieurs espaces. LeGOPATH agit comme le dossier racine d'un espace de travail.

Définition de la variable d'environnement$GOPATH

La variable d'environnement$GOPATH répertorie les endroits où Go recherche les espaces de travail Go.

Par défaut, Go suppose que notre emplacementGOPATH est à$HOME/go, où$HOME est le répertoire racine de notre compte utilisateur sur notre ordinateur. Nous pouvons changer cela en définissant la variable d'environnement$GOPATH. Pour une étude plus approfondie, suivez ce tutoriel sur lesreading and setting environment variables in Linux.

Pour plus d'informations sur la définition de la variable$GOPATH, reportez-vous au Godocumentation.

De plus, ceseries parcourt l'installation de Go et la configuration d'un environnement de développement Go.

$GOPATH n'est pas$GOROOT

Le$GOROOT est l’endroit où vit le code, le compilateur et les outils de Go - c’estnot notre code source. Le$GOROOT est généralement quelque chose comme/usr/local/go. Notre$GOPATH est généralement quelque chose comme$HOME/go.

Bien que nous n'ayons plus besoin de configurer spécifiquement la variable$GOROOT, elle est toujours référencée dans les matériaux plus anciens.

Parlons maintenant de la structure de l’espace de travail Go.

Anatomie de l'espace de travail Go

À l'intérieur d'un espace de travail Go, ouGOPATH, il y a trois répertoires:bin,pkg etsrc. Chacun de ces répertoires a une signification particulière pour la chaîne d’outil Go.

.
├── bin
├── pkg
└── src
  └── github.com/foo/bar
    └── bar.go

Jetons un coup d’œil à chacun de ces répertoires.

Le répertoire$GOPATH/bin est l'endroit où Go place les binaires quego install compile. Notre système d'exploitation utilise la variable d'environnement$PATH pour rechercher des applications binaires pouvant s'exécuter sans chemin complet. Il est recommandé d'ajouter ce répertoire à notre variable globale$PATH.

Par exemple, si nous n’ajoutons pas$GOPATH/bin à$PATH pour exécuter un programme à partir de là, nous aurions besoin d’exécuter:

$GOPATH/bin/myapp

Lorsque$GOPATH/bin est ajouté à$PATH, nous pouvons faire le même appel comme tel:

myapp

Le répertoire$GOPATH/pkg est l'endroit où Go stocke les fichiers objets précompilés pour accélérer la compilation ultérieure des programmes. Généralement, la plupart des développeurs n’auront pas besoin d’accéder à ce répertoire. Si vous rencontrez des problèmes avec la compilation, vous pouvez supprimer ce répertoire en toute sécurité et Go le reconstruira ensuite.

Le répertoiresrc est l'endroit où tous nos fichiers.go, ou code source, doivent être situés. Cela ne doit pas être confondu avec le code source utilisé par les outils Go, qui se trouve au niveau des$GOROOT. Au fur et à mesure que nous écrivons des applications, des packages et des bibliothèques Go, nous placerons ces fichiers sous$GOPATH/src/path/to/code.

Que sont les paquets?

Le code Go est organisé en paquets. Un package représente tous les fichiers d'un même répertoire sur le disque. Un répertoire ne peut contenir que certains fichiers du même package. Les packages sont stockés, avec tous les fichiers source Go écrits par l'utilisateur, dans le répertoire$GOPATH/src. Nous pouvons comprendre la résolution de paquets en important différents paquets.

Si notre code vit à$GOPATH/src/blue/red alors son nom de package devrait êtrered.

L'instruction d'importation pour le packagered serait:

import "blue/red"

Les packages hébergés dans les référentiels de code source, tels que GitHub et BitBucket, ont l'emplacement complet du référentiel dans le chemin d'importation.

Par exemple, nous importerions le code source àhttps://github.com/gobuffalo/buffalo en utilisant le chemin d'importation suivant:

import "github.com/gobuffalo/buffalo"

Par conséquent, ce code source serait à l'emplacement suivant sur le disque:

$GOPATH/src/github.com/gobuffalo/buffalo

Conclusion

Dans cet article, nous avons abordé lesGOPATH comme un ensemble de dossiers dans lesquels Go s'attend à ce que notre code source vive, ainsi que ce que sont ces dossiers et ce qu'ils contiennent. Nous avons expliqué comment changer cet emplacement de la valeur par défaut de$HOME/go au choix de l'utilisateur en définissant la variable d'environnement$GOPATH. Enfin, nous avons discuté de la façon dont Go recherche les packages dans cette structure de dossiers.

Introduit dans Go 1.11, lesGo Modules visent à remplacer les espaces de travail Go et lesGOPATH. Bien qu'il soit recommandé de commencer à utiliser des modules, certains environnements, tels que les environnements d'entreprise, peuvent ne pas être prêts à utiliser des modules.

LeGOPATH est l'un des aspects les plus délicats de la configuration de Go, mais une fois qu'il est configuré, nous pouvons généralement l'oublier.