“Caminho de importação não reconhecido” com go get

91

Estou tentando instalar um web.go, mas estou executando um go get github.com/hoisie/webretorno

package bufio: unrecognized import path "bufio"
package bytes: unrecognized import path "bytes"
package crypto/rand: unrecognized import path "crypto/rand"
package crypto/sha1: unrecognized import path "crypto/sha1"
package crypto/tls: unrecognized import path "crypto/tls"
package encoding/base64: unrecognized import path "encoding/base64"
package encoding/binary: unrecognized import path "encoding/binary"
package encoding/json: unrecognized import path "encoding/json"
package errors: unrecognized import path "errors"
package fmt: unrecognized import path "fmt"

e isso continua por um tempo com vários pacotes, antes de retornar nada mais. go envme dá:

GOARCH="amd64"
GOBIN="/usr/local/go/bin"
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH=""
GORACE=""
GOROOT="/home/me/go"
GOTOOLDIR="/home/me/go/pkg/tool/linux_amd64"
TERM="dumb"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread"
CXX="g++"
CGO_ENABLED="1"

Como posso instalar web.go? Usar go get(em vez de go install) é o que está no README na página do github. Minha versão Go é go version go1.2 linux/amd64.

q3d
fonte
3
Exportou GOROOT, mas não GOPATH? GOROOT é diferente de GOBIN? Como você instalou o Go? Como você configurou seu ambiente?
Volker
Eu instalei, siga a página golang.org/doc/install . Eu não tinha certeza do que colocar para GOPATH.
3º trimestre de

Respostas:

99

Os problemas estão relacionados a um inválido GOROOT.

Acho que você instalou o Go in /usr/local/go.
Portanto, mude seu GOROOTcaminho para o valor de /usr/local/go/bin.

Parece que você pretendia ter seu espaço de trabalho (GOPATH) localizado em /home/me/go.

Isso pode resolver seu problema.
Adicione isso ao final do seu perfil bash, localizado aqui =>$HOME/.profile

export GOROOT=/usr/local/go
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin

Certifique-se de remover as referências antigas de GOROOT.

Em seguida, tente instalar o web.go novamente.

Se isso não funcionar, faça com que o Ubuntu instale o Go para você.

sudo apt-get install golang

Tutorial em vídeo: http://www.youtube.com/watch?v=2PATwIfO5ag

Larry Battle
fonte
15
Você quase nunca deve definir GOROOT. Sua declaração PATH não atinge / usr / local / go / bin. Além disso, deve-se notar que os pacotes do ubuntu estão um pouco atrasados ​​em relação ao lançamento oficial, que é 1.2.
JimB
2
Quando segui as instruções de instalação do site oficial (instale do arquivo tar em / usr / local), recebi o erro acima até que mudei o GOROOT como acima.
Drew de
1
Acabei de instalar o golang 1.3 fresco no fedora 20 e go getdá o mesmo erro. GOROOTestá definido para /usrir instalado em / usr, não em / usr / local. Defina GOPATHcomo $HOME/go. Alguma ideia do que mais verificar?
Dfr
15
Respondendo a mim mesmo: GOROOTparece perturbador que resolveu o problema.
Dfr
4
1 para não definir GOROOT. Eu o desativei, certifiquei-me de que estava desativado echo $GOROOTe verifiquei se GO ainda o tinha no ambiente com o go envqual estava instalado e estava /usr/local/goonde fui instalado (portanto, não há necessidade de configurá-lo em nenhum caso)
StartupGuy
36

Instalei o Go com brewno OSX 10.11 e descobri que tinha que definir GOROOTpara:

/usr/local/Cellar/go/1.5.1/libexec

(Claro, substitua a versão neste caminho pela versão go que você tem)

Brew usa links simbólicos, que estavam enganando o gotool. Então siga os links para casa.

Eric
fonte
Ah, finalmente, encontrei algo que funcionou. Obrigado Eric!
Mir Adnan
23

Eu tive exatamente o mesmo problema, depois de passar da versão go antiga (instalada do PPA antigo) para os pacotes padrão mais recentes (1.2.1) no ubuntu 14.04.

A primeira etapa foi limpar o go existente:

sudo apt-get purge golang*

Que produz os seguintes avisos:

dpkg: warning: while removing golang-go, directory '/usr/lib/go/src' not empty so not removed
dpkg: warning: while removing golang-go.tools, directory '/usr/lib/go' not empty so not removed

Parece que a remoção de go deixa alguns arquivos para trás, o que pode confundir a instalação mais recente. Mais precisamente, a instalação em si será concluída sem problemas, mas depois disso qualquer comando go, como "go get something", fornecerá aqueles erros de "caminho de importação não reconhecido".

Tudo que eu tive que fazer foi remover esses dirs primeiro, reinstalar o golang e tudo funcionou perfeitamente (assumindo que você também definiu GOPATH)

# careful!
sudo rm -rf /usr/lib/go /usr/lib/go/src
sudo apt-get install golang-go golang-go.tools
jarras
fonte
Eu também tive que remover/usr/local/go/
Natim
Também foi necessário remover / usr / bin / go.
eatonphil
6

Porque GFW proibiu você de acessar golang.org! E quando eu uso o proxy, ele pode funcionar bem.

você pode ver as informações usando o comando go get -v -u golang.org/x/oauth2

Jefby
fonte
1
Este é exatamente o problema que tenho, pois estou na China. Depois de definir $ http_proxy, posso instalar o pacote sem erros.
cinza de
1
Não apenas bloqueado, mas também o DNS está poluído. Primeiro vá para http://ping.eu/nslookup/encontrar o IP correto do domínio, defina-o no arquivo hosts e use um proxy para fazer o download. export http_proxy=127.0.0.1:1080 https_proxy=127.0.0.1:1080 Às vezes, você só quer dizer a palavra F para o Gov
Mr.Wang do Next Door
4

$ unset GOROOTtrabalhou para mim. Como a maioria das respostas sugere que seu GOROOT é inválido.

Noelmcloughlin
fonte
2

Eu tive o mesmo problema no MacOS 10.10. E descobri que o problema causado pelo shell OhMyZsh. Então eu voltei para o bash e tudo deu certo.

Aqui está o meu ambiente de trabalho

bash-3.2$ go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/bis/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/darwin_amd64"
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1
Igor Barinov
fonte
É go envde quando não funcionou ou de quando funcionou? Provavelmente não foi "causado por [outro shell]", mas provavelmente foi uma falha na configuração correta GOPATHdesse outro shell. A família de shells csh e zsh não usa os mesmos arquivos de inicialização (ou seja, não ~/.profile). Em particular zshusa $ZDOTDIR/.zshenve $ZDOTDIR/.zprofile(onde o $ZDOTDIRpadrão é $HOME).
Dave C
1

As causas mais comuns são:
1. Um GOROOT configurado incorretamente
OU
2. GOPATH não está definido

Clyde D'Cruz
fonte
0

Tive o mesmo problema depois de atualizar go1.2 para go1.4.

Eu renomei src para _src em meu GOPATH e, em seguida, fiz um go get -v

Funcionou então eu deletei _src.

Espero que ajude.

Erol
fonte
0

Eu encontrei esse problema ao instalar um pacote diferente, e ele pode ser causado pela configuração GOROOT e GOPATH em seu PATH. Eu tendo a não definir GOROOT porque minha instalação do OS X cuidou disso (acredito) para mim.

  1. Certifique-se do seguinte em seu .profile (ou onde quer que você armazene a configuração de perfil: .bash_profile, .zshrc, .bashrc, etc):

    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin
  2. Além disso, é provável que você também queira unset GOROOT, caso esse caminho também esteja incorreto.

  3. Além disso, certifique-se de limpar seu PATH, de forma semelhante ao que fiz abaixo, logo antes da atribuição do GOPATH, ou seja:

    export PATH=$HOME/bin:/usr/local/bin:$PATH
    export GOPATH=$HOME/go
    export PATH=$PATH:$GOROOT/bin
  4. Então, source <.profile>para ativar

  5. tentar novamente go get
ThatsAMorais
fonte