web-dev-qa-db-fra.com

Impossible d'obtenir que Golang travaille sur Ubuntu

Ok, j'ai donc téléchargé Go 1.1 et le mets dans $ HOME/Documents/go.

Ensuite, j'ai modifié mon .bashrc pour qu'il soit:

export GOPATH=$HOME/Documents/go                                                
export GOROOT=$GOPATH
export GOARCH=AMD64
export GOOS=linux
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN

Puis j'ai cherché le .bashrc et essayé:

jan@janpc:~$ go version
go version go1.1 linux/AMD64

Mais je ne parviens pas à compiler ou à installer des dépendances ... J'essaie de lancer mon petit programme de test:

jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go run scrypt.go 
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
scrypt.go:9:3: cannot find package "github.com/dchest/scrypt" in any of:
    /home/jan/Documents/go/src/pkg/github.com/dchest/scrypt (from $GOROOT)
    ($GOPATH not set)
jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ 

Et quand j'essaye d'installer des dépendances:

jan@janpc:~/Documents/go/src/github.com/jan/scrypt$ go get "github.com/dchest/scrypt"
warning: GOPATH set to GOROOT (/home/jan/Documents/go) has no effect
package github.com/dchest/scrypt: cannot download, $GOPATH must not be set to $GOROOT. For more details see: go help gopath

Il compile et fonctionne bien sur mac. Je n'arrive pas à comprendre ce qui ne va pas dans ma configuration. Si j'essaie de supprimer $GOROOT ou $GOPATH, rien ne fonctionne et je ne sais pas à quoi les configurer, à part le chemin d'accès à Go.

EDIT: Il n’ya pas de $ GOROOT défini sur mon mac. Mais si je supprime $GOROOT sur Ubuntu, je reçois un tas d’erreurs comme celles-ci lorsque j’essaie de compiler.

cannot find package "fmt" in any of:
    /usr/local/go/src/pkg/fmt (from $GOROOT)
    /home/jan/Documents/go/src/fmt (from $GOPATH)
19

Votre variable d'environnement que vous avez définie par

$ export GOROOT=$GOPATH

est une erreur. Nulle part un tel réglage n'est requis ni recommandé. En fait, cela paralyse l’environnement vu par le système de compilation Go.

Supprimez ce paramètre, recréez votre environnement (. bashrc) ou ouvrez un nouveau terminal et cela devrait fonctionner (si aucun autre problème n'existe).

De plus, si vous ne faites pas de compilation croisée, je vous recommande de supprimer également ces éléments:

export GOARCH=AMD64
export GOOS=linux

En bref, GOPATH correctement exporté est la variable d'environnement only qui est, en première approximation, vraiment nécessaire. Quelques autres indices ici .

EDIT: OK, j'ai donc téléchargé la distribution binaire (go1.1.linux-AMD64.tar.gz). Citant de README:


Notes de distribution binaires

Si vous venez de défaire une distribution binaire Go, vous devez définir la variable d'environnement $ GOROOT jusqu'au chemin complet du tour répertoire (celui qui contient ce fichier README). Vous pouvez omettre le variable si vous le décompressez dans/usr/local/go, ou si vous reconstruisez depuis les sources en exécutant all.bash (voir doc/install.html) . Vous devez également ajouter le répertoire binaire Go $ GOROOT/bin sur le chemin de votre Shell.

Par exemple, si vous avez extrait le fichier tar dans $ HOME/go, vous pouvez mettez ce qui suit dans votre .profile:

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

Voir doc/install.html pour plus de détails.


Il est donc clair que vous n’avez pas suivi correctement les instructions ci-dessus. Résoudre cela et j'espère que cela fonctionnera pour vous alors.

17
zzzz

Pour installer, il est CRITIQUE de supprimer d’abord l’installation précédente (ou vous obtiendrez des erreurs la compilation échouera: runtime/mstkbar.go: 151: 10: debug.gcstackbarrieroff undefined )

dpkg -l|grep golang  #  if you see any, run following cmd to remove
Sudo apt-get purge golang-*

Vérifier si go est toujours installé 

type go    # see if go is installed

sortie typique si go est installé

go is hashed (/usr/local/go/bin/go)

si go est installé le supprimer 

Sudo rm -rf /usr/local/go     #  not just /usr/local/go/bin/go

télécharger la dernière archive https://golang.org/dl/ expand and install

new_golang_ver=$(curl https://golang.org/VERSION?m=text 2> /dev/null)
cd /tmp
wget https://dl.google.com/go/${new_golang_ver}.linux-AMD64.tar.gz
Sudo tar -C /usr/local -xzf  ${new_golang_ver}.linux-AMD64.tar.gz

définir ces variables d'environnement dans votre ~/.bashrc 

export PATH=/usr/local/go/bin:${PATH}
export GOPATH=${HOME}/gopath  # typical value change at will
export PATH=${GOPATH}/bin:${PATH}

sourcez vos nouvelles définitions env var ci-dessus

source ~/.bashrc  

vérifier l'installation

go version

si installé correctement sortie typique 

go version go1.9.3 linux/AMD64

--- install est complet alors compilons un monde de salut ---

[[ ! -d $GOPATH ]] && mkdir -p ${GOPATH}/{bin,pkg,src} # if no dir then create
mkdir -p ${GOPATH}/src/github.com/mygithubname/play
cd ${GOPATH}/src/github.com/mygithubname/play

maintenant coller ce qui suit pour créer le fichier source go hello_world.go 

tee hello_world.go  << WOW

package main

import "fmt"

func main() {
    fmt.Printf("hello, world\n")
}

WOW

compiler votre code source

go build hello_world.go 

./hello_world     #  run your executable 

bonjour le monde 


pour comprendre comment structurer votre code source go, voir https://golang.org/doc/code.html

Corriger l'erreur de paquet manquant

Vous avez également demandé comment corriger les erreurs de dépendance manquantes ... par exemple

scott@rapacious ~/other_src/gopath/src/github.com/bigeagle/gohop $ go build
hop/cipher.go:27:2: cannot find package "github.com/golang/snappy" in any of:
    /usr/local/go/src/github.com/golang/snappy (from $GOROOT)
    /home/scott/other_src/gopath/src/github.com/golang/snappy (from $GOPATH)
internal/logging.go:6:2: cannot find package "github.com/op/go-logging" in any of:
    /usr/local/go/src/github.com/op/go-logging (from $GOROOT)
    /home/scott/other_src/gopath/src/github.com/op/go-logging (from $GOPATH)

l'erreur ci-dessus se produira même après l'installation de votre installation go OK ... émettez simplement ceci pour télécharger et installer les paquets manquants de dépendance en amont manquants (et ceux qu'ils peuvent également référencer de manière récursive) 

cd ~/Documents/go/src/github.com/jan/scrypt/ # cd into the source dir
go get -v -t ./...   #  -v  verbose
                     #  -t  also download any test only packages
go build
15
Scott Stensland

TLDR: Désactivez $GOROOTen exécutant la commande suivante dans votre terminal export GOROOT=""

Go avait été installé sur Ubuntu 16.04 et tout fonctionnait bien.

Puis, par erreur, j'ai défini le $GOROOT sur $GOPATH à la suite d'un tutoriel. À ce stade, ma construction a commencé à échouer en disant:

warning: GOPATH set to GOROOT has no effect
cannot find package "fmt" in any of:
... (from $GOROOT) ($GOPATH not set)
cannot find package "io/ioutil" in any of:
imports runtime: cannot find package "runtime" in any of:
/home/mhsn/go/src/runtime (from $GOROOT)
($GOPATH not set)

Toutes les solutions que j'ai lues suggéraient de ne pas définir cette variable et je voulais le désactiver. J'ai trouvé le correctif suivant pour le rendre non défini: export GOROOT="" in bash.

Après avoir redéfini le $GOROOT sur vide, ce qui a été recommandé par tout le monde, revenez par défaut au chemin d'origine. Et cela a résolu le problème pour moi et la construction a commencé à fonctionner à nouveau.

3
Mohsin

Vous ne devez pas définir $ GOROOT pour des installations normales. 

Il suffit de taper export GOROOT="" et cela devrait régler votre problème. 

0
julien bouteloup