首页 >后端开发 >Golang >`go build` 和 `go install` 之间有什么区别,它们在哪里安装可执行文件?

`go build` 和 `go install` 之间有什么区别,它们在哪里安装可执行文件?

DDD
DDD原创
2024-12-03 18:41:11389浏览

What's the Difference Between `go build` and `go install`, and Where Do They Install Executables?

剖析“go install”:揭秘构建和安装过程

文档中经常没有解释 go build 和 go 之间的区别安装可能会让开发人员感到困惑。虽然大多数人期望 go install 通过将编译的可执行文件重新定位到指定位置来镜像 make install 的功能,但他们惊讶地发现结果驻留在 GOROOT/bin 目录中。本文旨在阐明这两个命令的目的和行为。

实际发生了什么?

go build 是一个简单的编译工具。它只是组装可执行文件并将其存储在指定的目的地。另一方面,go install 执行稍微复杂的过程:

  • 它编译可执行文件,就像 go build 一样。
  • 它将可执行文件移动到 $GOPATH/bin ,确保可以从命令行访问它。
  • 它将程序导入的所有非主包缓存在 $GOPATH/pkg 中。如果源代码未更改,则在后续编译期间会利用此缓存。

可视化包树

为了说明 go build 和go install,考虑以下包树:

.
├── bin
│   └── hello  # by go install
└── src   
    └── hello
        ├── hello  # by go build
        └── hello.go

hello 可执行文件由 go build 编译并驻留在src/hello 目录,而 go install 则放在 $GOPATH/bin 中,并将依赖缓存存储在 $GOPATH/pkg 中。

安装位置可以自定义吗?

与make install不同,go install不提供指定自定义安装目录的选项。为了实现这种级别的控制,有必要创建一个定义构建和安装过程的 Makefile。但是,通常不建议使用这种方法。

其他上下文

有关更多见解,请参阅有关以下主题的官方文档:

  • [走构建](https://go.dev/ref/cmd/go#hdr-Compile_packages_and_dependency)
  • [去安装](https://go.dev/ref/cmd/go#hdr-Install_and_build_packages_and_dependency)

以上是`go build` 和 `go install` 之间有什么区别,它们在哪里安装可执行文件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn