去安装不工作

go install not working

我在 debian 8.2 3.16.0-4-amd64 上使用 go version go1.5.1 linux/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 中,它是 运行ning 完美。此外,如果我 运行 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 变量。

我在这里遗漏了什么吗?这是我第一次尝试 go 但无法正常工作。

正如@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。我可以在 wordswordtest 包上使用 go install。所以,让 运行 go install words 看看目录会发生什么。

.
├── bin
│   └── words
├── pkg
│   └── darwin_amd64
└── src
    ├── bitbucket.org
    ├── github.com
    ├── golang.org
    ├── words
    └── wordtest

现在,我们可以看到我们已经为我们创建了一个 words 二进制文件(在 bin 目录中),我们可以通过调用 ./bin/words 运行 它.

根据 Games Brainiac go install work on packages 是正确的。但是让我添加一些关于在主目录中使用 go install 创建包的细节。

  .
  ├── bin
  │   └── app
  ├── pkg
  │   └── linux_amd64
  |         └── user
  |              └── handlers.a
  └── src
    ├── bitbucket.org
    ├── github.com
         └── user
              └── app
                   ├── main.go
                   └── handlers
                         └──handlers.go

看看上面的目录结构,我在 handlers 文件夹中创建了一个包含源文件 handlers.go 的包。我想构建那个包,我会 运行 go build 在 handlers 文件夹中,它只显示我们的文件没有编译错误,returns 在这种情况下什么也没有。

要构建包含主文件的包,我们需要 运行 go install 进入 app 文件夹。这将在 $GOPATH/pkg 内创建 handlers.a 包对象,并在 $GOPATH/bin 内创建可执行文件,文件夹名称为 (app in this case),其中我们使用主包创建 main.go 文件。