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
猜你喜欢
- 使用穷举法求两个数的最大公约数for m in range (0,2): a = int(input("
- 一、创建和管理表 1、创建表语法 create table 表名(column datatype [default expr][,colum
- 要使用摄像头,需要使用cv2.VideoCapture(0)创建VideoCapture对象,参数0指的是摄像头的编号,如果你电脑上有两个摄
- 功能介绍 (需要版本5.0.45)大数据操作ORM性能瓶颈在实体转换上面,并且不能使用常规的Sql去实现当列越多转换越慢,SqlSugar将
- 一、Python下载1.进入Python官网:https://www.python.org/2.选择windows版本(Download &
- Ajax,全称为Asynchronous JavaScript and XML,即异步的JavaScript和XML。它不是一门编程语言,而
- php+lottery.js制作九宫格抽奖实例,本抽奖功能效果表现好,定制方便简单,新手学习跟直接拿来用都非常不错,兼容IE、火狐、谷歌等浏
- DVWA(Damn Vulnerable Web Application)是一个用来进行安全脆弱性鉴定的PHP/MySQL Web应用,旨在
- 前言在前端编程中,事件的应用十分广泛,DOM上的各种事件。在Ajax大规模应用之后,异步请求更得到广泛的认同,而Ajax亦是基于事件机制的。
- 项目编写过程中,总能遇见对字典进行排序什么的,如果要实现多条件排序只需要下面几行代码实现。充分体现了python的好处了。teamitems
- 在js中this的指向对于新手来说一定是个难题,但是如果你真正理解了的话,也就没什么问题啦,下面就来讲讲this吧。JS中,this的值取决
- 前言本文主要介绍了关于Python中TCP socket的写法,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。一、 服务器
- 目录1. 字符串拆分函数.split()2. 字符串拼接函数.join()扩展:理解" ".join(s.split(&
- 今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题:本人是m
- MySQL是一个多线程的,结构化查询语言(SQL)数据库服务器。SQL在世界上是最流行的数据库语言。MySQL的执行性能非常高,运行速度非常
- 引言一波未平,一波又起。金融公司的业务实在是太引人耳目,何况我们公司的业处正处于风口之上(区块链金融),并且每天有大量现金交易,所以不知道有
- 前言Sphinx是一款支持多种编程语言的文档生成工具,在python项目开发过程中,可以帮助开发者根据需求生成相应的说明文档,拿今天我们就基
- Python函数函数就是把具有独立功能的代码块封装成一个小模块,可以直接调用,从而提高代码的编写效率以及重用性, 需要注意的是, 函数需要被
- ASP 组件 FILE对象当前,基于浏览器/服务器模式的应用比较流行。当用户需要将文件传输到服务器上时,常用方法之一是运行FTP服务器并将每
- Java 实现class PrimeNumber{public static void main(String[] args) {long