我在go version go1.5.1 linux/amd64
上使用debian 8.2 3.16.0-4-amd64
。我使用https://golang.org/doc/install安装了golang
。
这是我在~/.profile
文件
export GOPATH=$HOME/go
export PATH=$PATH:/usr/local/go/bin:/home/shivams/go/bin
在我的机器上运行go env
正在提供此输出
GOARCH="amd64"
GOBIN=""
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOOS="linux"
GOPATH="/home/shivams/go"
GORACE=""
GOROOT="/usr/local/go"
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GO15VENDOREXPERIMENT=""
CC="gcc"
GOGCCFLAGS="-fPIC -m64 -pthread -fmessage-length=0"
CXX="g++"
CGO_ENABLED="1"
/home/shivams/go
内的目录结构为{pkg,src,bin}
。在src目录中,它就像test/hello.go
。
如果我在src
目录并运行go run test/hello.go
,它就会完美运行。此外,如果我运行go build test/hello.go
,它将在同一目录中创建一个可执行hello
文件。
但是,如果我尝试运行go install test/hello.go
,那么我会收到此错误
go install: no install location for .go files listed on command line (GOBIN not set)
。如果我明确设置GOBIN
,那么我无法看到此错误。
据我所知,我的理解是如果设置了GOPATH,则无需设置GOBIN变量。
我在这里遗漏了什么?这是我第一次尝试去并且无法使其正常工作。
答案 0 :(得分:3)
正如@JimB所述,install
是为包设计的命令。为了给你一个明确的例子,这是我运行go env
命令时得到的结果。
GOARCH="amd64"
GOBIN="/Users/quazinafiulislam/Code/go/ogolang/bin"
GOEXE=""
GOHOSTARCH="amd64"
GOHOSTOS="darwin"
GOOS="darwin"
GOPATH="/Users/quazinafiulislam/Code/go/ogolang"
GORACE=""
GOROOT="/usr/local/Cellar/go/1.5.1/libexec"
GOTOOLDIR="/usr/local/Cellar/go/1.5.1/libexec/pkg/tool/darwin_amd64"
GO15VENDOREXPERIMENT=""
CC="clang"
GOGCCFLAGS="-fPIC -m64 -pthread -fno-caret-diagnostics -Qunused-arguments -fmessage-length=0 -fno-common"
CXX="clang++"
CGO_ENABLED="1"
您会看到GOPATH
已设置为我的项目根目录~/Code/go/ogolang
。现在,让我们看看我的项目根目录中的内容。
.
├── bin
├── pkg
│ └── darwin_amd64
└── src
├── bitbucket.org
├── github.com
├── golang.org
├── words
└── wordtest
如你所见,我有几个套餐。其中一个是wordtest
。我可以在go install
或words
个套餐上使用wordtest
。因此,让我们运行go install words
并查看目录会发生什么。
.
├── bin
│ └── words
├── pkg
│ └── darwin_amd64
└── src
├── bitbucket.org
├── github.com
├── golang.org
├── words
└── wordtest
现在,我们可以看到为我们创建了words
二进制文件(在bin
目录中),我们可以通过调用./bin/words
来运行它。
答案 1 :(得分:1)
根据Games Brainiac
,对包的安装工作是正确的。但是,让我在主目录中使用go install创建包中添加一些细节。
.
├── bin
│ └── app
├── pkg
│ └── linux_amd64
| └── user
| └── handlers.a
└── src
├── bitbucket.org
├── github.com
└── user
└── app
├── main.go
└── handlers
└──handlers.go
看看上面的目录结构,我在源文件handlers.go
的文件夹处理程序中创建了一个包。我想构建那个包,我将在handlers文件夹中运行go build
显示我们的文件没有编译错误,在这种情况下不返回任何内容。
要使用主文件构建包,我们需要在app文件夹中运行go install
。这将创建$GOPATH/pkg
内的handlers.a包对象和$GOPATH/bin
内的可执行文件,文件夹名为(app in this case)
,其中我们使用包main来生成main.go文件。