Estou tentando instalar meu pacote personalizado para meu arquivo main.go. No entanto, quando eu corri
go install custom.go
Eu entendi esse erro
go install: no install location for .go files listed on command line (GOBIN not set)
Como eu defino GOBIN?
go install
instala pacotes, não arquivos individuais. Leia todo golang.org/cmd/go e veja como configurar seus arquivos.Respostas:
Atualização 2020: desde Go 1.11 e a introdução dos módulos Go ,
GOPATH
não é mais necessário por projeto, e o padrão é~/go
para ferramentas / projetos globais que você fariago get
.Vá 1,16 (Q1 2020) deve padrão
GOBIN
paraGOPATH[0]/bin
.Mas, por enquanto, para qualquer projeto usando módulos, você não teria mais uma mensagem de erro como "
go install: no install location ...
".Resposta original 2014:
Verifique sua
GOPATH
variável.Certificar-se de que:
bin
pasta dentro de sua pasta GOPATH.Veja a variável de ambiente GOPATH (onde 'DIR' é uma
GOPATH
pasta):Por exemplo, este thread ilustra o que acontece no caso em que uma construção go é feita fora de
GOPATH/src
:Veja Go Build
Se tiver feito isso
go build
, você também pode tentar umgo install
(nãocustom.go
): você deseja instalar o pacote, não um único arquivo.fonte
Eu defini o caminho GOBIN e funcionou para mim
fonte
cannot install, GOBIN must be an absolute path
:(..
ou~
no caminho que especificou? Recebi esse erro e apenas mudei para um caminho absoluto como/home/ben/bin/
ou uniforme$HOME/bin/
. Meu comando completo era (em fishshell, vá para v1.11)env GOBIN=$HOME/bin/ go install testfile.go
.Como um iniciante, encontrei este erro quando estava tentando vários comandos go (construir, executar e instalar). Resumindo, você não pode instalar um filename.go . Você só pode instalar um pacote.
Isso era confuso, porque eu havia aprendido que:
nate:~/work/src/dir $ go run hello/hello.go hello, world.
funciona bem. Mas não consegui descobrir por que a instalação não funcionava:
nate:~/work/src/dir $ go install hello/hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH)
Não importa em qual diretório eu estava:
nate:~/work/src/dir $ cd hello nate:~/work/src/dir/hello $ go install hello.go go install: no install location for .go files listed on command line (GOBIN not set) nate:~/work/src/dir/hello $ go install hello can't load package: package hello: cannot find package "hello" in any of: /opt/go/src/hello (from $GOROOT) /home/ubuntu/work/src/hello (from $GOPATH)
Essa confusão ocorre porque o go run funciona apenas com arquivos de origem Go (nomes de arquivo que terminam em .go) e o go install aceita apenas pacotes. Os pacotes são nomeados por seus caminhos de importação ou caminho do sistema de arquivos. Portanto:
nate:~/work/src/dir $ go install dir/hello nate:~/work/src/dir $ go install ./hello/ nate:~/work/src/dir/hello $ go install .
tudo funciona muito bem. O primeiro se refere ao pacote por caminho de importação (dado que $ GOPATH = "/ home / nate / work", as ferramentas go procuram o código-fonte em / home / nate / work / src), os outros são interpretados como sistema de arquivos caminhos por causa dos períodos iniciais.
Veja também os documentos GOPATH .
fonte
go install
funciona em diretórios e se você especificar um arquivo go em particular, isso pode causar esse problema específico.Na verdade, existem 2 tipos diferentes de comportamento.
go install <package>
isso está documentado em Compilar e instalar pacotes e dependências. Você não precisa de GOBIN se definir GOPATH corretamente.
go install <gofile>
isso não está documentado e você precisa da variável GOBIN env neste modo.
fonte
go install <gofile>
está documentado, nogo help packages
qualgo install --help
se refere a. O problema é quego install
(em 1.9.2 e anteriores) tem comportamento inconsistente, em um caso requer e em outro não requer que GOBIN seja explicitamente definido.Como respostas anteriores apontaram, se seu env GOPATH estiver configurado corretamente para sua área de trabalho, você não precisa configurar a variável env GOBIN.
Verifique suas variáveis de ambiente go executando $ go env | grep -i "^ GO" e procure GOROOT e GOPATH para verificar se GOROOT está apontando para a instalação de origem do GO e GOPATH apontando para sua área de trabalho.
Se tudo estiver correto, navegue até o subdiretório onde reside seu pacote.go e execute $ go build (sem nome de arquivo) primeiro e $ go install (novamente sem o nome do arquivo) em segundo lugar, se não houver nenhuma mensagem de erro na tela, pacote está pronto em sua área de trabalho / pkg / youros /../ yourpackage.a
fonte
No Windows com cygwin, parece ser uma boa ideia configurar GOBIN para $ GOPATH / bin.
e lembre-se de escapar adequadamente do separador de nome de arquivo do Windows:
fonte
Para
*nix
sistema, veja ondego
está instalado, executando o seguinte comando:$ which go
qual saída vamos dizer:
/usr/local/go/bin/go
em seguida, adicione as seguintes entradas em
~/.bash_profile
ou em~/.zshrc
:export GOROOT=/usr/local/go export GOPATH=$GOROOT/src //your-go-workspace export GOBIN=$GOROOT/bin //where go-generate-executable-binaries PATH=$PATH:$GOPATH:$GOBIN export PATH
PS: Não se esqueça da fonte
~/.bash_profile
ou~/.zshrc
, da seguinte forma:fonte
/usr/local/go/bin
?Em relação à configuração da
GOBIN
versão da variável, não exigindo e contando apenas comGOPATH
:GOBIN
é necessário se não tivermos um pacote, ou seja, o arquivo está diretamente noGOPATH
diretório. Isso é provável quando estamos testando os recursos do Go como alunosPara projetos Go típicos, os arquivos estão nos diretórios do pacote. Para estes,
GOPATH
é bom o suficiente.Em outras palavras, as duas soluções a seguir funcionariam: a. Definido
GOBIN
explicitamente como $ GOPATH / bin [apenas para fins de aprendizagem, pode evitar] b. Crie um subdiretório que seria o nome do seu pacote e mova os arquivos .go para eleEu acho que os utilitários Go devem remover o erro acima e lidar melhor com o cenário - com base em se o argumento é um diretório ou um arquivo de origem
fonte
Para usuários WINDOWS
Abra um prompt de comando (
Win
+r
e digitecmd
) ou uma janela do PowerShell (Win
+x
e digitei
).Configurando o GOPATH
go env -w GOPATH=c:\your-go-work
Mais detalhes no link abaixo https://github.com/golang/go/wiki/SettingGOPATH#windows
Configurando GOBIN
go env -w GOBIN=C:\somewhere\else\bin
Recomendo verificar o exemplo de código fornecido por golang. Isto me ajudou bastante. https://golang.org/doc/code.html#Command
fonte
No Windows:
go env -w GOBIN=C:\Users\yourname\go\bin
Confirme com o
go env
comando que GOBIN está definido, então ogo install
comando salva corretamente o executável no diretório bin.fonte
Eu também tive o mesmo problema (GOBIN não precisa ser definido separadamente), certifique-se de ter o seguinte
go install <your_module>
fonte
Você não precisa de $ GOBIN se configurou um $ GOPATH corretamente. Nesse caso, simplesmente verifique novamente se o seu projeto reside na pasta $ GOPATH / src .
fonte
De https://golang.org/cmd/go/#hdr-Environment_variables :
e https://golang.org/cmd/go/#hdr-GOPATH_environment_variable :
e https://golang.org/cmd/go/#hdr-Modules__module_versions__and_more
Portanto, parece que basicamente você pode usar GOBIN para substituir temporária ou permanentemente o local de instalação binário padrão (ou seja
$GOPATH/bin
). Tive sucesso ao instalar um arquivo 1 vá "script" usandoenv GOBIN=$HOME/bin/ go install testfile.go
. Isso foi feito usando go v1.11.fonte
Tentar
export GOROOT=""
export PATH=$PATH:$GOROOT/bin
fonte