go get命令不再具有安装功能

go get的功能

一直以来,我们知道go get命令可以借助代码管理工具通过远程拉取或更新代码包及其依赖包,并自动完成编译和安装。整个过程就像安装一个App一样简单。

go get命令可以动态获取远程代码包,命令在内部实际上分成了两步操作:第一步是下载源码包,第二步是执行 go install。

相关参数介绍:

  • -d 只下载不安装
  • -f 只有在你包含了 -u 参数的时候才有效,不让 -u 去验证 import 中的每一个都已经获取了,这对于本地 fork 的包特别有用
  • -fix 在获取源码之后先运行 fix,然后再去做其他的事情
  • -t 同时也下载需要为运行测试所需要的包
  • -u 强制使用网络去更新包和它的依赖包
  • -v 显示执行的命令

基本使用方式如下:

bash 复制代码
go get github.com/davyxu/tabtoy

go install

在golang 1.16版本中,引入go install命令。该命令的功能相当于之前go get第二步的安装功能。go install 被设计为"用于构建和安装二进制文件"。

无论当前是否在一个模块下,此go install命令都会在 $GOPATH/bin 下安装指定版本的工具。

go get安装功能迁移

随着go install的出现,在golang 1.18版本中,go get将二进制安装相关的功能都转移到了go install,仅作为用于编辑go.mod文件的命令存在。

在golang 1.18版本中删掉了go get安装二进制的功能,也意味着go get的行为就等同于现在执行go get -d命令了,仅需下载源码,并将依赖添加至 go.mod 即可。

改造原因

Go一直使用 go get 命令,将需要的工具安装到$GOPATH/bin 目录下,但这种方式存在一个很严重的问题。go get由于具备更改go.mod文件的能力,因此要避免执行go get命令时,让它接触到go.mod 文件,否则它会将安装的(可执行)工具作为一个依赖。

go install @ 是从 1.16 开始增加的,无论当前是否在一个模块下,此命令都会在 $GOPATH/bin 下安装指定版本的工具。

Go 1.16 中GO111MODULE 默认是打开的,go install不会修改 go.mod 之类的文件,不会造成任何意外。

小结

如果你使用的是Golang 1.18及以上版本,那么之前很多文章中go get命令可能并不适合依赖二进制了,而需要改用go install命令来进行操作。

相关推荐
To_OC2 小时前
从一行入口代码啃透 NestJS:工厂模式、装饰器和依赖注入是怎么串起来的
后端·设计模式·nestjs
Python私教2 小时前
多个项目怎么安全合并?先适配,再切换
后端·python·架构
Python私教4 小时前
从表格到管理系统:别先写页面,先补齐权限、流程和审计
数据库·后端·架构
北斗落凡尘4 小时前
LangGraph 入门实战(12)--使用MCP
后端·python·langchain
SomeB1oody6 小时前
【RustyML入门】6.0. 数学工具
开发语言·后端·机器学习·rust·教程
IT_陈寒7 小时前
为什么我的JavaScript闭包总是漏掉那个变量?
前端·人工智能·后端
用户8356290780517 小时前
如何使用 Python 将 PowerPoint 转换为 PDF 文档
后端·python
倔强的石头_7 小时前
从 8 行报错到一条故障链:我用蓝耘 MaaS 做了一个 AI 日志分析助手
后端
敲个大西瓜7 小时前
Spring Could Alibaba 核心面试题
java·后端·spring
用户8356290780518 小时前
如何使用 Python 为 PowerPoint 幻灯片添加切换效果
后端·python