使用go
工具一段时间之后,它看起来像go get
:
一个软件,而go install
只是
它。在这种情况下,为什么go install
命令存在,因为go get
取代它?
答案 0 :(得分:48)
go install
是本地工作时工作流程的一部分。假设您要使用库,但由于某种原因需要进行更改。你会这样做:
go get -d library
,只下载它; go install library
安装本地版本。据我所知go get
没有标记表明不下载,因此无法在此处替换go install
。
从头开始开发新软件包时使用相同的工作流程。
答案 1 :(得分:13)
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\
答案 2 :(得分:1)
请注意,go 1.16 (Q1 2021)将使这一区别更加清晰,将CL 266360作为issue 40276的一部分来实现:
go install
现在接受带有版本后缀的参数(例如go install example.com/cmd@v1.0.0
)。
这将导致go install
以模块感知模式构建和安装软件包,忽略当前目录或任何父目录中的go.mod
文件(如果有)有一个。
在不影响主模块依赖性的情况下,用于安装可执行文件。
go install
(带有或不带有版本后缀,如上所述)现在是在模块模式下构建和安装软件包的推荐方法。
go get
应该与-d
标志一起使用,以在不构建包的情况下调整当前模块的依赖性,并使用go get
来构建和不推荐安装软件包。
在未来版本中,-d
标志将始终处于启用状态。