go install和go get的区别实例详解

 更新时间:2023年01月28日 11:04:54   作者:catmes  
go install是Golang用来编译和安装自定义package的工具,下面这篇文章主要给大家介绍了关于go install和go get区别的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

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

总结 

到此这篇关于go install和go get区别的文章就介绍到这了,更多相关go install和go get区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go语言reflect包的反射机制基本用法示例

    Go语言reflect包的反射机制基本用法示例

    反射在处理接口和类型断言、开发通用功能或者设计框架时尤为重要,本文将深入探索 Go 语言中的反射机制,通过具体的示例展示如何使用 reflect 包,让你能够在 Go 项目中有效地利用这一强大的工具
    2023-11-11
  • GoLang jwt无感刷新与SSO单点登录限制解除方法详解

    GoLang jwt无感刷新与SSO单点登录限制解除方法详解

    这篇文章主要介绍了GoLang jwt无感刷新与SSO单点登录限制解除方法,JWT是一个签名的JSON对象,通常用作Oauth2的Bearer token,JWT包括三个用.分割的部分。本文将利用JWT进行认证和加密,感兴趣的可以了解一下
    2023-03-03
  • go语言中linkname的用法

    go语言中linkname的用法

    这篇文章主要介绍了go语言中linkname的用法,本文给点俺家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • 使用golang实现在屏幕上打印进度条的操作

    使用golang实现在屏幕上打印进度条的操作

    这篇文章主要介绍了使用golang实现在屏幕上打印进度条的操作,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • golang pprof监控memory block mutex统计原理分析

    golang pprof监控memory block mutex统计原理分析

    这篇文章主要为大家介绍了golang pprof监控memory block mutex统计原理分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • GoFrame gredis配置文件及配置方法对比

    GoFrame gredis配置文件及配置方法对比

    这篇文章主要为大家介绍了GoFrame gredis配置管理中,配置文件及配置方法对比,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • 一文带你掌握Golang中的类型断言

    一文带你掌握Golang中的类型断言

    类型断言是 Golang 中的一个非常重要的特性,使用类型断言可以判断一个接口的实际类型是否是预期的类型,以便进行对应的处理,下面就跟随小编一起深入了解一下Golang中的类型断言吧
    2024-01-01
  • go-cqhttp环境配置及安装过程

    go-cqhttp环境配置及安装过程

    这篇文章主要介绍了go-cqhttp环境配置,包括go-cqhttp安装及简单介绍,本文结合示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 详解go如何使用xorm在执行前改写 SQL

    详解go如何使用xorm在执行前改写 SQL

    这篇文章主要为大家介绍了详解go如何使用xorm在执行前改写SQL的实现过程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-06-06
  • Golang中Append()使用实例详解

    Golang中Append()使用实例详解

    今天在刷leetcode的时候,第113题让我遇到了一个Go语言中append函数的一个坑,所以复习下,这篇文章主要给大家介绍了关于Golang中Append()使用的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论