go install和go get的区别实例详解
作者:catmes 发布时间:2024-05-05 09:30:07
go get 和 go install 的区别
先看结论:
go get
: 对go mod
项目,添加,更新,删除go.mod
文件的依赖项(仅源码)。不执行编译。侧重应用依赖项管理。go install
: 在操作系统中安装 Go 生态的第三方命令行应用。不更改项目go.mod
文件。侧重可执行文件的编译和安装。
之前网上乱传的 go get 命令要被弃用是错的。正确说法是,go 1.17
后,go get
命令的使用方式发生了改变.
具体什么改变呢?请看官方说明:
Starting in Go 1.17, installing executables with go get is deprecated. go install may be used instead.
In Go 1.18, go get will no longer build packages; it will only be used to add, update, or remove dependencies in go.mod.
Specifically, go get will always act as if the -d flag were enabled.
大概表达3个意思:
自
Go 1.17
起, 弃用go get
命令安装可执行文件,使用go install
命令替代.自
Go 1.18
起,go get
命令不再有编译包的功能。将只有添加,更新,移除go.mod
文件中的依赖项的功能。go get
命令将默认启用-d
选项。
go get命变更
Go 1.17 之前:
go get
通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装
。实际分成两步操作:1. 下载源码包,2. 执行 go install。Go 1.17 之后:
弃用go get命令的编译和安装功能
go get命令变更的原因
由于 go 1.11
之后 go mod
modules特性的引入,使得go get
命令,既可以安装第三方命令,又可以从 go.mod
文件自动更新项目依赖。但多数情况下,开发者只想做二者之一。
自 go 1.16
起,go install
命令,可以忽略当前目录的 go.mod
文件(如果存在),直接安装指定版本的命令行应用。
go get
命令的编译和安装功能,因为和 go install
命令的功能重复,故被弃用。由于弃用了编译和安装功能,go get
命令将获得更高的执行效率, 也不会在更新包的时候,再出现编译失败的报错。
Since modules were introduced, the go get command has been used both to update dependencies in go.mod and to install commands.
This combination is frequently confusing and inconvenient: in most cases, developers want to update a dependency or install a command but not both at the same time.Since Go 1.16, go install can install a command at a version specified on the command line while ignoring the go.mod file in the current directory (if one exists).
go install should now be used to install commands in most cases.go get’s ability to build and install commands is now deprecated, since that functionality is redundant with go install.
Removing this functionality will make go get faster, since it won’t compile or link packages by default.
go get also won’t report an error when updating a package that can’t be built for the current platform.
go get
由于具备更改 go.mod
文件的能力,因此我们 必须要避免执行 go get
命令时,让它接触到我们的 go.mod
文件 ,否则它会将我们安装的工具作为一个依赖。
所以,如果不是为了更新项目依赖,而是安装可执行命令,请使用 go install
GOMODULE常用命令
go mod init # 初始化go.mod
go mod tidy # 直接从源代码中获取依赖关系,更新依赖文件。可删掉go.mod中无用的依赖。
go mod download # 下载依赖文件
go mod vendor # 将依赖转移至本地的vendor文件
go mod edit # 手动修改依赖文件
go mod graph # 打印依赖图
go mod verify # 校验依赖
在项目源码中使用 import 语句,导入新的依赖模块前,可用 go get
命令,先下载新模块。
go instsll 应该在module外部使用 https://github.com/golang/go/issues/40276
弃用go get命令安装可执行文件 https://go.dev/doc/go-get-install-deprecation
Go 1.16 中关于 go get 和 go install https://cloud.tencent.com/developer/article/1766820
总结
来源:https://blog.csdn.net/WHQ78164/article/details/128081577


猜你喜欢
- 语法:ROW_NUMBER() OVER(PARTITION BY COLUMN ORDER BY COLUMN) <BR> 例
- Node被设计用来高效的处理I/O操作,但是你应该知道,有些类型的程序并不适合这种模式。比如,如果你打算用Node处理一个CPU密集的任务,
- 定义:在Django框架中,模板是可以帮助开发者快速生成呈现给用户页面的工具模板的设计方式实现了我们MVT中VT的解耦,VT有着N:M的关系
- 重复触发就是防止用户重复点击提交数据了,我们一般都是点击之后没反应会再次点击了,这个不但要从用户体验上来做好,还在要js或php程序脚本上做
- sql="select * from admin where users='"&users&&q
- 一.基于纹理背景的图像分割该部分主要讲解基于图像纹理信息(颜色)、边界信息(反差)和背景信息的图像分割算法。在OpenCV中,GrabCut
- 用户登录验证脚本,Chkpwd.asp<% '=======用户登录验证脚本======= '如果尚未定义Passed
- 1、说明当确定没有异常后,还需要做一些事情可以使用else语句。注意:try中没有异常,else之后的代码才会被执行。2、实例while T
- 1、问题描述某厂生产甲乙两种饮料,每百箱甲饮料需用原料6千克、工人10名,获利10万元;每百箱乙饮料需用原料5千克、工人20名,获利9万元。
- 一、文章主题在看到相关的抽奖诈骗报道,有的人却不明白是怎么回事。为了预防被抽奖诈骗,因此,我们通过一些简单的例子来说一说,抽奖更深层的逻辑,
- 上次更新到pygame实现俄罗斯方块游戏(基础篇3)现在继续一、定义玩家类定义玩家类是为了便于进行手动和机器模式或各种不同机器人模式的混合使
- MySQL添加新用户,见文章底部。按照正常思维,创建用户和设置密码什么的,应该是一个动作完成的。然而事实并非如此。我每次都是通过在网上找代码
- 代码如下:Dim strName, iLoop For Each strName 
- Python程序可以调用一组基本的函数(即内建函数),比如print()、input()和len()等函数。Python本身也内置一组模块(
- python logging 重复写日志问题用Python的logging模块记录日志时,遇到了重复记录日志的问题,第一条记录写一次,第二条
- SQLSTATESQL SERVER 驱动程序错误描述 HY000所有绑定列都是只读的。必须是可升级的列,以使用 SQLSetPos 或 S
- 先安装第三方库:pip install requestsdef isConnected(): import requ
- 1、前言拖拽排序对于小伙伴们来说应该不陌生,平时工作的时候,可能会选择使用类似Sortable.js这样的开源库来实现需求。但在完成需求后,
- 首先,我们知道一副牌里有54张牌,然后牌里的数字是从 3 - 2 的里面总共有13张牌,然后 4 中花色 分别是 ♠?
- stylus及stylus-loader版本问题安装下面指定本版就解决了:"stylus": "^0.54.7