去安装不工作

时间:2015-10-03 21:25:15

标签: go debian

我在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变量。

我在这里遗漏了什么?这是我第一次尝试去并且无法使其正常工作。

2 个答案:

答案 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 installwords个套餐上使用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文件。