Go 语言的包的安装位置在很大程度上取决于你是否设置了 GOPATH 环境变量。
1. 有 GOPATH 环境变量的情况:
go get:当使用 go get 安装包时,它将包下载到 GOPATH 中的 pkg/mod 目录。在这个目录中,Go Modules 将下载和缓存所有的依赖项。如果你安装的是二进制工具,它们将被放在 GOPATH 的 bin 目录中。
例如,如果你的 GOPATH 是 /home/user/go,并且你运行 go get github.com/example/mypackage,包将被下载到 /home/user/go/pkg/mod 目录,而可执行文件(如果有的话)将被放在 /home/user/go/bin 目录。
go install:使用 go install 时,Go 会编译源代码并将生成的可执行文件安装到 GOPATH 的 bin 目录。如果你执行 go install github.com/example/mytool,该工具的可执行文件将被安装到 /home/user/go/bin。
2. 没有 GOPATH 环境变量的情况:
如果你不设置 GOPATH 环境变量,Go 1.11+ 版本会使用 Go Modules 来管理依赖。在这种情况下,包将被下载到你的项目目录中,而不是 GOPATH。
go get:包将被下载到项目目录的 pkg/mod 子目录。可执行文件不会被创建,因为 go get 主要用于获取包,而不是构建可执行文件。
go install:当使用 go install 时,Go 1.11+ 版本会构建可执行文件并将其安装到项目目录中的 bin 子目录。这个 bin 子目录会在项目目录下创建,而不是在 GOPATH 中。
需要注意的是,Go Modules 的目标是将依赖项存储在项目目录中,以减少对 GOPATH 的依赖。这有助于确保项目的构建环境是可重现的。不再需要设置全局 GOPATH 环境变量,这是 Go Modules 的一项重要改进。