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命令来进行操作。

相关推荐
小码哥_常8 小时前
一套自己部署的 IM,客户端是同一份 Flutter
前端·后端
学长毕设11 小时前
基于SpringBoot的实验室资产管理系统
java·spring boot·后端
努力的小雨13 小时前
给 AI 眼镜开发应用有多难?我从零做了一个陪练,还上架了
后端
excel15 小时前
双 Token 与前端使用 Crypto 公私钥鉴权换 Token,哪种方案更好?
前端·后端
AI入职记15 小时前
AI 代码审查召回率实测:20 个骗过单元测试的变异体,抓到 13 个
后端
浮链序16 小时前
别让 AI 客服把用户当猴耍:百来行 Python 把「转人工」做成一条高可用链路
后端
属于自己的天空16 小时前
Claude Code 插件完全指南:官方市场怎么用,怎么自己写(v2.1.269+)
后端
Tokenfree16 小时前
给大模型调用加一个熔断器:60 行代码,三个阈值
后端
Jason_chen16 小时前
Linux 进程调度器深入解析与实时性优化指南(基于 Linux 5.10+)
后端
1360967572316 小时前
三个 Agent 干同一个活,职责边界到底该怎么划
后端