英文:
Go install fails with error: no install location for directory xxx outside GOPATH
问题
~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1
~/src/go-statsd-client> go install
go install: 在GOPATH之外的目录/Users/me/src/go-statsd-client没有安装位置
无论项目的结构如何,始终会出现相同的错误消息。go build可以正常工作。
这是我的go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
这是在Mac OSX Mountain Lion上安装的go,并且使用了homebrew。
英文:
~/src/go-statsd-client> echo $GOPATH
/Users/me/gopath
~/src/go-statsd-client> echo $GOROOT
/usr/local/Cellar/go/1.1.1\
~/src/go-statsd-client> go install
go install: no install location for directory /Users/me/src/go-statsd-client outside GOPATH
No matter what structure the project is in this always fails with the same message. Go build works perfectly.
Here is my go env
GOARCH="amd64"
GOBIN=""
GOCHAR="6"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/me/gopath"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.1.1"
GOTOOLDIR="/usr/local/Cellar/go/1.1.1/pkg/tool/darwin_amd64"
CC="gcc"
GOGCCFLAGS="-g -O2 -fPIC -m64 -pthread -fno-common"
CGO_ENABLED="1"
This is on Mac OSX Mountain Lion and go was installed with homebrew.
答案1
得分: 212
对于任何OS X用户和未来的我,你还需要设置GOBIN
以避免在安装和go get
时出现这个令人困惑的消息。
mkdir bin
export GOBIN=$GOPATH/bin
英文:
For any OS X users and future me, you also need to set GOBIN
to avoid this confusing message on install and go get
mkdir bin
export GOBIN=$GOPATH/bin
答案2
得分: 119
当你在go install
命令中不提供任何参数时,默认会尝试将包安装在当前目录中。错误消息告诉你它无法这样做,因为当前目录不是你的$GOPATH
的一部分。
你可以选择:
- 将
$GOPATH
定义为你的$HOME
(export GOPATH=$HOME
)。 - 将你的源代码移动到当前
$GOPATH
内(mv ~/src/go-statsd-client /User/me/gopath
)。
在执行上述操作之后,进入go-statsd-client
目录并输入go install
命令,它将正常工作,无论你在文件系统的任何位置输入go install go-statsd-client
命令都将正常工作。生成的二进制文件将放在$GOPATH/bin
目录中。
作为一个无关的建议,你可能希望使用域名对你的包进行命名空间,以避免名称冲突(例如,如果你的源代码存放在github.com/you/go-statsd-client
中)。
英文:
When you provide no arguments to go install
, it defaults to attempting to install the package in the current directory. The error message is telling you that it cannot do that, because the current directory isn't part of your $GOPATH
.
You can either:
- Define
$GOPATH
to your $HOME (export GOPATH=$HOME
). - Move your source to within the current
$GOPATH
(mv ~/src/go-statsd-client /User/me/gopath
).
After either, going into the go-statsd-client
directory and typing go install
will work, and so will typing go install go-statsd-client
from anywhere in the filesystem. The built binaries will go into $GOPATH/bin
.
As an unrelated suggestion, you probably want to namespace your package with a domain name, to avoid name clashing (e.g. github.com/you/go-statsd-client
, if that's where you hold your source code).
答案3
得分: 30
你正在使用go install命令来安装一个位于GOPATH文件夹之外的目录。
请设置你的GOBIN环境变量,或将src文件夹移动到GOPATH内。
GOPATH/
bin/
src/
go-statsd-client/
更多信息:GO BUILD源代码,第296行
英文:
You are using go install on a directory outside the GOPATH folder.
Set your GOBIN env variable, or move src folder inside GOPATH.
GOPATH/
bin/
src/
go-statsd-client/
More info: GO BUILD Source code, line 296
答案4
得分: 27
你需要设置GOPATH
和GOBIN
。确保你已经完成了以下步骤(请将~/go
替换为你喜欢的GOPATH
,并相应地更改GOBIN
)。这在Ubuntu 16.04 LTS
上经过测试。
export GOPATH=~/go
mkdir ~/go/bin
export GOBIN=$GOPATH/bin
选定的答案对我来说没有解决问题。
英文:
You need to setup both GOPATH
and GOBIN
. Make sure you have done the following (please replace ~/go
with your preferred GOPATH
and subsequently change GOBIN
). This is tested on Ubuntu 16.04 LTS
.
export GOPATH=~/go
mkdir ~/go/bin
export GOBIN=$GOPATH/bin
The selected answer did not solve the problem for me.
答案5
得分: 7
你需要在你选择的GOPATH目录下创建3个目录。
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
然后你可以在someProgram目录(将可执行文件放在bin目录中)或someLibrary目录(将库文件放在pkg目录中)内运行go install
命令。
英文:
You'll want to have 3 directories inside your chosen GOPATH directory.
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
Then you'll run go install
from inside either someProgram (which puts an executable in bin) or someLibrary (which puts a library in pkg).
答案6
得分: 3
我在Windows上遇到了这个问题。
我的问题是我的%GOPATH%
环境变量被设置为
C:\Users\john\src\goworkspace
而不是
C:\Users\john\src\goworkspace\
在末尾添加缺失的斜杠解决了我的问题。
英文:
I had this problem on Windows.
My problem was that my %GOPATH%
environment variable was set to
C:\Users\john\src\goworkspace
instead of
C:\Users\john\src\goworkspace\
Adding the missing trailing slash at the end fixed it for me.
答案7
得分: 3
以下是我在Mac上使用Atom安装go并配置好的.bash_profile文件:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
英文:
For what it's worth, here's my .bash_profile, that works well for me on a mac with Atom, after installing go with Homebrew:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
答案8
得分: 2
在我的情况下(OS X),这是因为我将GOPATH
设置为/home/username/go
(按照书上的说明),而不是/Users/username/go
。
英文:
In my case (OS X) it was because I have set GOPATH
to /home/username/go
(as per the book) instead of /Users/username/go
答案9
得分: 2
我在Windows上使用命令go help gopath
在cmd中获取了相关信息,并阅读了指令中的粗体文本。
如果你想要安装的代码位于..BaseDir...\SomeProject\src\basic\set
,那么GOPATH不应该与代码位于同一位置,而应该只是基本项目目录:..BaseDir...\SomeProject
。
GOPATH环境变量列出了查找Go代码的位置。在Unix上,值是以冒号分隔的字符串。在Windows上,值是以分号分隔的字符串。在Plan 9上,值是一个列表。
如果未设置环境变量,GOPATH默认为用户主目录中名为"go"的子目录(在Unix上为$HOME/go,在Windows上为%USERPROFILE%\go),除非该目录包含Go发行版。运行"go env GOPATH"可以查看当前的GOPATH。
请参阅https://golang.org/wiki/SettingGOPATH以设置自定义的GOPATH。
GOPATH中列出的每个目录必须具有规定的结构:
-
src目录保存源代码。src下的路径确定了导入路径或可执行文件名。
-
pkg目录保存已安装的包对象。与Go树一样,每个目标操作系统和体系结构对都有自己的pkg子目录(pkg/GOOS_GOARCH)。
-
如果DIR是GOPATH中列出的目录,具有DIR/src/foo/bar中源代码的包可以作为"foo/bar"导入,并将其编译形式安装到"DIR/pkg/GOOS_GOARCH/foo/bar.a"。
-
bin目录保存已编译的命令。每个命令的名称都是其源目录,但只包括最后一个元素,而不是整个路径。也就是说,具有DIR/src/foo/quux中源代码的命令将安装到DIR/bin/quux,而不是DIR/bin/foo/quux。"foo/"前缀被删除,以便您可以将DIR/bin添加到PATH中以访问已安装的命令。如果设置了GOBIN环境变量,命令将安装到其指定的目录,而不是DIR/bin。GOBIN必须是绝对路径。
以下是一个示例目录布局:
GOPATH=/home/user/go
/home/user/go/
src/
foo/
bar/ (包bar中的Go代码)
x.go
quux/ (主包中的Go代码)
y.go
bin/
quux (已安装的命令)
pkg/
linux_amd64/
foo/
bar.a (已安装的包对象)
..........
如果已将GOPATH设置为基本项目目录并仍然遇到此问题,在Windows上,你可以尝试将GOBIN设置为Base Project DIR\bin
或%GOPATH%\bin
。
英文:
I'm on Windows, and I got it by giving command go help gopath
to cmd, and read the bold text in the instruction,
that is if code you wnat to install is at ..BaseDir...\SomeProject\src\basic\set
, the GOPATH should not be the same location as code, it should be just Base Project DIR: ..BaseDir...\SomeProject
.
> The GOPATH environment variable lists places to look for Go code. On
> Unix, the value is a colon-separated string. On Windows, the value is
> a semicolon-separated string. On Plan 9, the value is a list.
>
> If the environment variable is unset, GOPATH defaults to a
> subdirectory named "go" in the user's home directory ($HOME/go on
> Unix, %USERPROFILE%\go on Windows), unless that directory holds a Go
> distribution. Run "go env GOPATH" to see the current GOPATH.
>
> See https://golang.org/wiki/SettingGOPATH to set a custom GOPATH.
>
> Each directory listed in GOPATH must have a prescribed structure:
>
> The src directory holds source code. The path below src determines the
> import path or executable name.
>
> The pkg directory holds installed package objects. As in the Go tree,
> each target operating system and architecture pair has its own
> subdirectory of pkg (pkg/GOOS_GOARCH).
>
> If DIR is a directory listed in the GOPATH, a package with source in
> DIR/src/foo/bar can be imported as "foo/bar" and has its compiled form
> installed to "DIR/pkg/GOOS_GOARCH/foo/bar.a".
>
> The bin directory holds compiled commands. Each command is named for
> its source directory, but only the final element, not the entire path.
> That is, the command with source in DIR/src/foo/quux is installed into
> DIR/bin/quux, not DIR/bin/foo/quux. The "foo/" prefix is stripped so
> that you can add DIR/bin to your PATH to get at the installed
> commands. If the GOBIN environment variable is set, commands are
> installed to the directory it names instead of DIR/bin. GOBIN must be
> an absolute path.
>
> Here's an example directory layout:
>
> GOPATH=/home/user/go
>
> /home/user/go/
> src/
> foo/
> bar/ (go code in package bar)
> x.go
> quux/ (go code in package main)
> y.go
> bin/
> quux (installed command)
> pkg/
> linux_amd64/
> foo/
> bar.a (installed package object)
> ..........
if GOPATH has been set to Base Project DIR and still has this problem, in windows you can try to set GOBIN as Base Project DIR\bin
or %GOPATH%\bin
.
答案10
得分: 1
小心运行
export GOPATH=$HOME
Go假设你的代码存在于与GOPATH
相关的特定位置。因此,你可以使用Docker来运行任何Go命令:
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
现在你可以使用任何Go命令,例如:
go test github.com/<organization name>/<repository name>
英文:
Careful when running
export GOPATH=$HOME
Go assume that your code exists in specific places related to GOPATH
. So, instead, you can use docker to run any go command:
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
And now you can use any golang command, for example:
go test github.com/<organization name>/<repository name>
答案11
得分: 0
在Windows中,当我设置GOPATH环境变量时,我的cmd窗口已经打开。
首先,我必须关闭cmd窗口,然后重新打开才能生效。
英文:
In windows, my cmd window was already open when I set the GOPATH environment variable.
First I had to close the cmd and then reopen for it to become effective.
答案12
得分: -1
在OSX Mojave 10.14上,go
通常安装在/usr/local/go
目录下。
因此,设置这些环境变量,你就可以开始使用了。
export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin
如果可行的话,还可以将这些添加到你的bash_profile
或zsh_profile
中。
echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile
英文:
On OSX Mojave 10.14, go
is typically installed at /usr/local/go
.
Hence, setup these ENVs and you should be good to go.
export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin
Also, add these to your bash_profile
or zsh_profile
if it works.
echo "export GOPATH=/usr/local/go && export GOBIN=/usr/local/go/bin" >> ~/.bash_profile && source ~/.bash_profile
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论