安装什么去做?

pm1*_*100 47 go

文档没有说buildvs vs install做什么

我的期望是它就像make install; 即它需要编译的东西并放入它的最终位置(/usr/local/bin/my_new_toy或其他任何东西),但似乎它放入了东西GOROOT/bin

我可以告诉你做一个make install- 即把东西放在别的地方吗?或者我只是写一个makefile(请告诉我没有)?

One*_*One 32

如果要将二进制文件转到特定位置,可以使用环境变量GOBIN:

bin /目录保存已编译的命令.每个命令都以其源目录命名,但仅以最终元素命名,而不是整个路径.也就是说,DIR/src/foo/quux中带有源的命令安装在DIR/bin/quux中,而不是DIR/bin/foo/quux中.foo /被剥离,以便您可以将DIR/bin添加到PATH以获取已安装的命令.如果设置了GOBIN环境变量,则命令将安装到它命名的目录而不是DIR/bin.

资料来源:http://golang.org/cmd/go/#hdr-GOPATH_environment_variable

GOBIN=/usr/local/bin/ go install
Run Code Online (Sandbox Code Playgroud)

如果你想要每个项目bin/目录,那么你只需要附加你的项目路径GOPATH,但是你必须拥有你的代码$project-path/src/,go install并将所有二进制文件放入$project-path/bin.

export GOPATH=/dir1:/dir2:/dir3
Run Code Online (Sandbox Code Playgroud)

如果没有设置GOBIN,二进制文件从/ DIR1/src目录中/ DIR1 /箱端起来,二进制文件从/ DIR2/src目录是在/ DIR2 /箱,等等(从$ GOROOT二进制文件在$ GOROOT/src目录结束/箱).

来源:https://groups.google.com/forum/#!topic/golang- nuts/ -mN8R_Fx-7M

它完全超越了我的想法,但你可以随时使用(感谢JimB):

go build -o /path/binary-name
Run Code Online (Sandbox Code Playgroud)

  • 您也可以使用`go build -o`直接指定输出文件名 (6认同)
  • 或多或少,它还安装了库文件(`blah.a`)到 `$GOPATH/pkg/`。 (2认同)
  • `go env` 将显示假定的 `GOPATH` 和所有其他变量 (2认同)

Ben*_*ari 21

go buildgo install:

go build只需编译可执行文件并将其移至目标位置即可。 go install多做一点。它将可执行文件移动到 $GOPATH/bin并缓存所有导入到的非主要软件包 $GOPATH/pkg。如果尚未更改,则缓存将在下一次编译中使用。


go build和之后的软件包树go install

.
??? bin
?   ??? hello  # by go install
??? src 
    ??? hello
        ??? hello  # by go build
        ??? hello.go
Run Code Online (Sandbox Code Playgroud)

比较完整的参考资料

  • @fabs 用例是您已经用 Go 编写了一个您想要自己使用的工具。您希望能够在终端执行“mytool foo”,因此您将“$GOPATH/bin”添加到终端的“PATH”,然后“go install”使奇迹发生。 (6认同)
  • 我有一个项目,我输入“go install”但没有任何反应。没有错误消息,只是什么都没有。这是怎么回事? (3认同)
  • “go install”的用途是什么?据我了解,“go build”的结果可以分发并在不同的机器上运行,而“go install”需要源代码并在本地安装 go 程序。 (3认同)
  • `go install` 也可以构建吗?还是我需要在安装前运行 `go build`? (2认同)
  • @RafaelEyng不,`go install`就足够了,但是它的exec文件在`bin /`目录中创建 (2认同)