~/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
无论项目采用何种结构,总是会失败并显示相同的消息。 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上,并且是随着自制软件安装的。
答案 0 :(得分:155)
对于任何OS X用户和未来的我,您还需要设置GOBIN
以避免在安装时出现此混淆消息并go get
mkdir bin
export GOBIN=$GOPATH/bin
答案 1 :(得分:99)
如果不向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
,如果您持有源代码的话)。
答案 2 :(得分:25)
您正在GOPATH文件夹之外的目录中使用 go install 。 设置GOBIN env变量,或在GOPATH中移动 src 文件夹。
GOPATH/
bin/
src/
go-statsd-client/
更多信息:GO BUILD Source code,第296行
答案 3 :(得分:5)
您希望在所选的GOPATH目录中有3个目录。
GOPATH
/bin
/src
/someProgram
program.go
/someLibrary
library.go
/pkg
然后你将从someProgram(将可执行文件放入bin)或someLibrary(将库放入pkg)中运行go install
。
答案 4 :(得分:3)
我在Windows上遇到了这个问题。
我的问题是我的%GOPATH%
环境变量设置为
C:\Users\john\src\goworkspace
而不是
C:\Users\john\src\goworkspace\
在最后添加缺失的尾部斜线为我修复了它。
答案 5 :(得分:2)
在我的情况下(OS X),因为我已将GOPATH
设置为/home/username/go
(根据本书)而不是/Users/username/go
答案 6 :(得分:2)
对于它的价值,这里是我的.bash_profile,在安装了Homebrew之后,在使用Atom的Mac上运行良好:
export GOROOT=`go env GOROOT`
export GOPATH=/Users/yy/Projects/go
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
答案 7 :(得分:1)
我在Windows上,我通过向cmd发出命令go help gopath
来获取它,并阅读说明中的粗体文本,
如果您要安装的代码位于..BaseDir...\SomeProject\src\basic\set
, GOPATH 不应与代码位于同一位置,它应该只是Base Project DIR:..BaseDir...\SomeProject
GOPATH环境变量列出了要查找Go代码的位置。上 Unix,值是冒号分隔的字符串。在Windows上,值为 以分号分隔的字符串。在计划9中,值是一个列表。
如果未设置环境变量,则GOPATH默认为a 子目录名为" go"在用户的主目录中($ HOME /继续 Unix,%USERPROFILE%\ go在Windows上),除非该目录包含Go 分配。跑"去环境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/ (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)
..........
如果GOPATH已设置为Base Project DIR且仍然存在此问题,则在Windows中您可以尝试将 GOBIN 设置为Base Project DIR\bin
或%GOPATH%\bin
。
答案 8 :(得分:0)
在Windows中,当我设置GOPATH环境变量时,我的cmd窗口已经打开。 首先,我必须关闭cmd,然后重新打开才能生效。
答案 9 :(得分:0)
在OSX Mojave 10.14上,go
通常安装在/usr/local/go
上。
因此,设置这些ENV,您应该就可以了。
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
答案 10 :(得分:0)
在此线程和其他地方定义了几种修复方法,但是大多数人都错过了不仅仅是解决当前问题的方法,我们还在尝试解决项目设计中是否出错的问题。来自项目创建者的意图或期望。
首先,您需要修复$ GOPATH变量。 Soln:将其设置为您的项目基本路径。 其次,您需要定义项目的入口点。通常使用“ main”定义。
这是项目执行理解程序的基本工作目录和工作点的方式。
答案 11 :(得分:0)
跑步时要小心
export GOPATH=$HOME
假设您的代码存在于与GOPATH
相关的特定位置。因此,您可以使用docker运行任何go命令:
docker run -it -v $(pwd):/go/src/github.com/<organization name>/<repository name> golang
现在您可以使用任何golang命令,例如:
go test github.com/<organization name>/<repository name>
答案 12 :(得分:0)
问题是您不在具有带有go main功能的go文件的软件包目录中,并且go install找不到要安装的命令(带有go main功能的go文件)。
$ cd /path/to/file-with-main-function.go
然后运行:
$ go install