Quelles devraient être les valeurs de GOPATH et GOROOT?


324

J'essaie d'installer doozer comme ceci:

$ goinstall github.com/ha/doozer

Je reçois ces erreurs.

goinstall: os: go/build: package could not be found locally
goinstall: fmt: go/build: package could not be found locally
goinstall: io: go/build: package could not be found locally
goinstall: reflect: go/build: package could not be found locally
goinstall: math: go/build: package could not be found locally
goinstall: rand: go/build: package could not be found locally
goinstall: url: go/build: package could not be found locally
goinstall: net: go/build: package could not be found locally
goinstall: sync: go/build: package could not be found locally
goinstall: runtime: go/build: package could not be found locally
goinstall: strings: go/build: package could not be found locally
goinstall: sort: go/build: package could not be found locally
goinstall: strconv: go/build: package could not be found locally
goinstall: bytes: go/build: package could not be found locally
goinstall: log: go/build: package could not be found locally
goinstall: encoding/binary: go/build: package could not be found locally

3
@Motin le lien ci-dessus n'est plus valide
Jorrit Reedijk

Le dossier est devenu obsolète pour le projet. Un problème lié à OSX se trouve ici: github.com/go-lang-plugin-org/go-lang-idea-plugin/issues/841
Motin

Remarque: par défaut, GOPATHsera défini pour vous dans Go 1.8 (2017). Voir ma réponse ci
VonC

Ouais, j'ai trouvé ça déroutant aussi, la façon dont les godocs sont organisés. Cela a aidé: albertech.blogspot.com/2017/01/…
jar

1
@BenyaminJafari parce qu'il goinstallest vraiment ancien pré-Go1 et n'existe pas depuis 2012.
Dave C

Réponses:


311

GOPATHest abordé dans la cmd/godocumentation :

La GOPATHvariable d'environnement répertorie les emplacements où rechercher le code Go. Sous Unix, la valeur est une chaîne séparée par deux-points. Sous Windows, la valeur est une chaîne séparée par des points-virgules. Sur le plan 9, la valeur est une liste.

GOPATH doit être défini pour obtenir, construire et installer des packages en dehors de l'arborescence Go standard.

GOROOTest abordé dans les instructions d'installation :

Les distributions binaires Go supposent qu'elles seront installées dans /usr/local/go(ou c:\Gosous Windows), mais il est possible d'installer les outils Go à un emplacement différent. Dans ce cas, vous devez définir la GOROOTvariable d'environnement pour pointer vers le répertoire dans lequel elle a été installée.

Par exemple, si vous avez installé Go to your home directory, vous devez ajouter les commandes suivantes à $HOME/.profile:

export GOROOT=$HOME/go
export PATH=$PATH:$GOROOT/bin

Remarque: GOROOT doit être défini uniquement lors de l'installation dans un emplacement personnalisé.

(version mise à jour de la réponse de Chris Bunch .)


44
Des informations beaucoup plus complètes sur GOPATH sont disponibles dans la section Comment écrire du code Go. Une compréhension des informations nécessaires pour comprendre la gocommande, ce qui est essentiel pour travailler avec Go. Par exemple, l'utilisation de goinstalll'OP devrait maintenant l'être go get.
Sonia

13
Notez également le chemin d'installation réel de go. Par exemple, dans une configuration homebrew par défaut, homebrew installera go in /usr/local/Cellar/go/. Dans ce cas, le chemin d'exportation doit être défini avec export GOROOT=/usr/local/Cellar/go/{version}et export PATH=$PATH:$GOROOT/bin.
ekillaby

10
Je devais faire export GOROOT=/usr/local/Cellar/go/1.2/libexec/pour que le mien travaille avec de la bière.
Steven Soroka

Je ne peux pas suggérer cette modification car l'application se plaint que ma modification "semble contenir" du code non formaté (ce qui n'est pas le cas; merci beaucoup) mais:
Wildcard

À partir de Go 1.10, si GOROOT n'est pas défini, l'outil go essaiera de le comprendre par son propre emplacement. Je ne peux pas non plus coller le lien, car le collage ne fonctionne pas dans l'application iOS de Stack Exchange. Très frustré en ce moment.
Wildcard

97

Voici ma configuration simple:

directory for go related things: ~/programming/go
directory for go compiler/tools: ~/programming/go/go-1.4
directory for go software      : ~/programming/go/packages

GOROOT, GOPATH, PATH sont définis comme suit:

export GOROOT=/home/user/programming/go/go-1.4
export GOPATH=/home/user/programming/go/packages
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

Donc, en bref:

GOROOT est destiné aux compilateurs / outils issus de l'installation go.
GOPATH est pour vos propres projets go / bibliothèques tierces (téléchargées avec "go get").


Je pense que cette réponse est plus facile à comprendre car il existe une correspondance avec la structure des dossiers.
h-rai

Est-ce que GOPATH inclut des arborescences de projet entières (par exemple git) avec des fichiers non-go - par exemple des images, des scripts, des fichiers de construction, etc.?
Serge Merzliakov

52

Première course go env.
Si vous voyez que le go n'est pas installé, vous pouvez l'installer via homebrewou via le package et / ou d'autres moyens.
Si vous voyez une sortie, votre Goest installé.
Il vous montre tous les envs qui sont définis et ne le sont pas.

Si vous voyez vide pour GOROOT:

  1. Run which go(Sur mon ordinateur: /usr/local/go/bin/go)
  2. puis exporter comme ça export GOROOT=/usr/local/go

Si vous voyez vide pour GOPATH:

  1. Créez n'importe quel répertoire n'importe où sur votre ordinateur pour les projets go dans mon cas: ~/GO_PROJECTS
  2. ensuite export GOPATH=~/GO_PROJECTS

2
which gol'a fait pour moi. Il utilisait un autre emplacement d'installation go d'une installation précédente utilisant Chocolatey. Supprimé ce dossier et supprimé de la variable PATH. Maintenant ça marche. Merci!
sgarg

which gola commande n'a pas fonctionné pour moi dans Windows 7. Comment puis-je trouver où dois-je exécuter cette commande
firstpostcommenter

La commande Windows correspondante est where goqu'elle vous montrera le chemin du fichier exécuté
Falco

export GOPATH=~/GO_PROJECTSa fait du travail
Thamaraiselvam

39

GOPATHest discuté ici :

La GOPATHvariable d'environnement

GOPATH peut être défini sur une liste de chemins séparés par deux-points dans laquelle se trouvent du code Go, des objets de package et des exécutables.

Définissez a GOPATHpour utiliser goinstall pour construire et installer votre propre code et vos bibliothèques externes en dehors de l'arborescence Go (et pour éviter d'écrire des Makefiles).

Et GOROOTest discuté ici :

$GOROOTLa racine de l'arbre Go, souvent $HOME/go. Il s'agit par défaut du parent du répertoire où all.bashest exécuté. Si vous choisissez de ne pas définir $GOROOT, vous devez exécuter gomake au lieu de make ou gmake lors du développement de programmes Go en utilisant les makefiles conventionnels.


donc si j'ai installé go dans ~ / projects / go, quelles devraient être les valeurs de la variable pour trouver os, fmt, etc?
jshen

2
Alors, où Go s'installe-t-il lorsque vous sudo apt-get install golang?
weberc2

9
@ weberc2 si vous courez, go envvous devriez voir cette information, pour moi c'était/usr/lib/go/
Andre

19

J'ai lu les go help gopathdocuments et j'étais toujours incroyablement confus, mais j'ai trouvé ce petit pépite à partir d'une autre page go doc:

La variable d'environnement GOPATH spécifie l'emplacement de votre espace de travail. C'est probablement la seule variable d'environnement que vous devrez définir lors du développement du code Go.

http://golang.org/doc/code.html#GOPATH


10

Le GOPATH ne doit pas pointer vers l'installation Go, mais plutôt vers votre espace de travail (voir https://golang.org/doc/code.html#GOPATH ). Chaque fois que vous installez un paquet avec go get ou go install, il atterrira dans le GOPATH. C'est pourquoi il vous avertit que vous ne voulez certainement pas que des packages aléatoires provenant d'Internet soient transférés dans votre installation officielle.


9

À partir de go 1.8 (Q2 2017), GOPATH sera défini par défaut sur $ HOME / go

Voir le numéro 17262 et le commentaire de Rob Pike:

$HOME/goce sera.
Il n'y a pas de meilleure réponse, mais c'est court et doux, et cela ne peut être un problème de choisir ce nom que s'il $HOME/goexiste déjà, ce qui ne fera plaisir qu'aux experts qui ont déjà installé et comprendront GOPATH.


Comment un sujet aussi simple peut-il devenir si complexe! Merci pour la meilleure réponse ici.
dodgy_coder

@dodgy_coder En fait ... regardez les deux premières lignes de mon autre réponse: stackoverflow.com/a/37905102/6309 ;) Cela pourrait finir par être encore plus simple: plus de GOPATH du tout! Plus de détails sur stackoverflow.com/a/48914523/6309 .
VonC

oui je suis d'accord, GOPATH n'est pas vraiment nécessaire si vous optez pour la valeur par défaut, est-ce correct? J'ai dû le définir de toute façon car il était requis pour l'environnement de développement Google App Engine (Go Standard). En fait, ils vous disent de définir le GOPATH, mais ne vous disent pas à quelle valeur le définir ...!
dodgy_coder

@dodgy_coder Oui, par défaut, Go recherchera le CHEMIN du projet dans une valeur prédéterminée fixe.
VonC

6

Comme mentionné ci-dessus:

La variable d'environnement GOPATH spécifie l'emplacement de votre espace de travail.

Pour Windows , cela a fonctionné pour moi (dans la fenêtre Ms-dos):

set GOPATH=D:\my_folder_for_go_code\

Cela crée une variable GOPATH que Ms-dos reconnaît lorsqu'elle est utilisée comme suit:

cd %GOPATH%

3

En ce GOROOTqui concerne spécifiquement, Go 1.9 le définira automatiquement sur son chemin d'installation.
Même si vous avez plusieurs Go installés, appeler celui de 1.9.x sera défini GOROOTsur /path/to/go/1.9(avant, s'il n'est pas défini, il supposait un chemin par défaut comme /usr/local/goou c:\Go).

Voir CL Go Review 53370 :

Le go toolva maintenant utiliser le chemin à partir duquel il a été appelé pour tenter de localiser la racine de l'arborescence d'installation de Go .
Cela signifie que si l'ensemble de l'installation de Go est déplacé vers un nouvel emplacement, le go tooldevrait continuer à fonctionner comme d'habitude.

Cela peut être annulé en définissant GOROOTl'environnement, ce qui ne devrait être fait que dans des circonstances inhabituelles.
Notez que cela n'affecte pas le résultat de la runtime.GOROOT()fonction , qui continuera à signaler l'emplacement d'installation d'origine; cela peut être corrigé dans les versions ultérieures.


0

À partir de 2020 et Go version 1.13+, dans Windows, la meilleure façon de mettre à jour GOPATH est simplement de taper l'invite de commande:

setx GOPATH C:\mynewgopath

0

Voici une solution (utilisateur unique):

GOROOT=$HOME/.local # your go executable is in $GOROOT/bin
GOPATH=$HOME/.gopath
PATH=$GOROOT/bin:$GOPATH/bin:$PATH

gose plaint si vous passez .gopathà .go.

Je souhaite qu'ils soient allés avec la façon dont les rust/cargogars ont fait et ont simplement tout mis en un seul endroit.


-1

en osx, j'ai installé avec brew, voici le paramètre qui fonctionne pour moi

GOPATH="$HOME/my_go_work_space" //make sure you have this folder created

GOROOT="/usr/local/Cellar/go/1.10/libexec"

-1

Je devais ajouter

export GOROOT=/usr/local/Cellar/go/1.10.1/libexec

à mon ~ / .bash_profile sur Mac OS X


-1

Il y a aussi un cas où lorsque nous utilisons go, il compile tous les fichiers go.

Disons donc que nous avions un fichier main.go et plus tard, nous avons changé le fichier actuel en main_old.go , puis ajouté notre nouveau fichier main.go. Ensuite, lorsque nous construisons notre application, tous les fichiers go seront compilés. L'erreur qui se produit peut donc être due à une erreur de compilation dans certains autres fichiers go.


-1

Une fois Go lang installé, GOROOT est le répertoire racine de l'installation.

Lorsque j'ai explosé le binaire Go Lang dans le répertoire Windows C: \, mon GOROOT devrait être C: \ go. S'il est installé avec le programme d'installation de Windows, il peut s'agir de C: \ Program Files \ go (ou C: \ Program Files (x86) \ go, pour les packages 64 bits)

 GOROOT = C:\go

tandis que mon GOPATH est l'emplacement du code source ou de l'espace de travail Go lang.

Si mon code source Go lang se trouve dans C: \ Users \\ GO_Workspace, votre GOPATH serait comme ci-dessous:

 GOPATH = C:\Users\<xyz>\GO_Workspace

-1

Vous n'avez pas besoin de définir explicitement GOROOT(les versions modernes de Go peuvent le comprendre par elles-mêmes en fonction de l'emplacement du binaire go que vous exécutez).

En outre, vous obtenez l'erreur suivante lorsque vous essayez de travailler avec vgo:

go: modules disabled inside GOPATH/src by GO111MODULE=auto; see 'go help modules'

Suppression de GOROOT, mise à jour de mon GOPATH et export GO111MODULE="on"résolution du problème.

GOPATH voir ici

GOPATH peut être défini sur une liste de chemins séparés par deux-points dans laquelle se trouvent du code Go, des objets de package et des exécutables.

Définissez un GOPATH pour utiliser goinstall pour construire et installer votre propre code et des bibliothèques externes en dehors de l'arborescence Go (et pour éviter d'écrire des Makefiles).


-2

les valeurs doivent être (MACOS):

GOROOT="/usr/local/go" --> all binaries file core go
GOPATH="/Applications/proyectos/go" --> the route to workspace (custom workspace)

-3

Si vous utilisez la distribution go, vous devez indiquer où se trouvent les fichiers include, par exemple:

$ rpm -ql golang | grep include
/usr/lib/golang/include

(C'est pour Fedora 20)

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.