go get和go install有什么区别?

thi*_*wfx 57 go

使用该go工具一段时间后,它看起来像go get:

  1. (可选)下载,
  2. 编译,
  3. 并安装

一个软件,而go install简单

  1. 编译
  2. 并安装

它.在这种情况下,为什么go install命令存在,因为go get它取代了它?

Bop*_*reH 57

go install是本地工作时工作流程的一部分.假设您要使用库,但由于某种原因需要进行更改.你会这样做:

  • go get -d library,只下载它;
  • 对下载的包进行更改;
  • go install library 安装本地版本.

据我知道go get有没有标志,以表明它应该下载,所以它不能代替go install在这里.

从头开始开发新包时使用相同的工作流程.

  • 我不同意这个答案。您也可以在第三个要点中使用`go get`而不是`go install`,因为`go get`不会重新下载库(除非您添加`-u`)。从头开始编写库时,您也可以使用`go get`。去安装似乎完全多余。 (2认同)

Ale*_*ban 20

go get 按此顺序执行两项主要操作:

  • 下载并保存在$GOPATH/src/<import-path>导入路径中命名的包(源代码)及其依赖项中

  • 执行一个 go install

-d标志(go get -d)指示go get下载包后停止; 也就是说,它指示go get不要这样做go install


区别:

go get //验证是否需要下载软件包,如果需要则下载然后编译

go install //跳过包下载的部分,只需编译(如果缺少任何包,这将抛出错误)


关于GOPATH环境变量

GOPATH环境变量必须以能够被设置get,build并且install包,并指定你的工作空间的位置.它可能是开发Go代码时需要设置的唯一环境变量.

同样,GOPATH不应指向Go安装,而应指向您的工作区.

例如,在Windows上,如果您确定工作区位于c:\gowork\,则需要将GOPATH值设置为c:\gowork

在此输入图像描述

您的源代码应该c:\gowork\src\<some project folder>\在您go get从命令提示符处运行时,c:\gowork\src\<some project folder>\您将看到c:\gowork\bin\c:\gowork\pkg\正在创建.


Von*_*onC 8

请注意,go 1.16(2021 年第 1 季度)将使差异更加清晰,作为问题 40276 的一部分使用CL 266360实施:

go install现在接受带有版本后缀的参数(例如,go install example.com/cmd@v1.0.0)。
这会导致go install建立和模块感知模式安装软件包忽略了go.mod文件在当前目录或父目录,如果有一个。
对于在不影响主模块的依赖关系的情况下安装可执行文件很有用

go install,带或不带版本后缀(如上所述),现在是在模块模式下构建和安装包的推荐方式。

go get应与-d标志一起使用以调整当前模块的依赖项,而无需构建包,不推荐使用go get来构建和安装包
未来的版本中,该-d标志将始终启用


Iza*_*ana 5

来自文档

从 Go 1.17 开始,不推荐使用 go get 安装可执行文件。可以使用 go install 来代替。

在 Go 1.18 中,go get 将不再构建包;它只会用于添加、更新或删除 go.mod 中的依赖项。具体来说,go get 总是会表现得就像启用了 -d 标志一样。