当前位置: 首页 > news >正文

go install报错: should be v0 or v1, not v2问题解决

1. 背景

执行go install时,报错

go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd@v2.99.1: invalid version: should be v0 or v1, not v2
-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd@v2.99.1: invalid version: should be v0 or v1, not v2
go: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest: unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2

2. 排查过程

由于网络上搜不到相关信息,以下通过查看源码的方式排查

2.1. 打开go源码,搜索unzip关键字,找到upzip方法,下面看到日志->和输出的很像,加上sl前缀,重新打包运行查看

img

2.2. 重新打包
cd src
./make.bash

img

2.3. 运行
cd /Users/albert/go/go1.21/go1.21.7/bin
./go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
sl-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
sl-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd@v2.99.1: invalid version: should be v0 or v1, not v2
sl-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd@v2.99.1: invalid version: should be v0 or v1, not v2
sl-> unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
go: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest: unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
2.4. 一步一步多加点日志

img

2.5. 能发现是cmd/vendor/golang.org/x/mod/zip/zip.go:810处报的错
    1. 由于后面还有改动代码,添加注释等,截图和运行结果稍有不匹配
./go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest
sl2-stack trace:
goroutine 17 [running]:
runtime/debug.Stack()runtime/debug/stack.go:24 +0x5e
cmd/vendor/golang.org/x/mod/zip.Unzip.func1()cmd/vendor/golang.org/x/mod/zip/zip.go:790 +0x45
cmd/vendor/golang.org/x/mod/zip.Unzip({0xc0000329c0, 0x57}, {{0x7ff7bfefef25?, 0x0?}, {0xc0000131e8?, 0xc0000131e8?}}, {0xc000106930, 0x6d})cmd/vendor/golang.org/x/mod/zip/zip.go:810 +0x455
cmd/go/internal/modfetch.download({0x1789e70, 0x1b2dce0}, {{0x7ff7bfefef25?, 0x9a0000c0002840e0?}, {0xc0000131e8?, 0x9a387d2d4521074e?}})cmd/go/internal/modfetch/fetch.go:154 +0x765
cmd/go/internal/modfetch.Download.func1()cmd/go/internal/modfetch/fetch.go:55 +0x5e
cmd/go/internal/par.(*ErrCache[...]).Do.func1()cmd/go/internal/par/work.go:119 +0x13
cmd/go/internal/par.(*Cache[...]).Do(0x178e120, {{0x7ff7bfefef25, 0x36}, {0xc0000131e8, 0x7}}, 0xc0001dbbf0)cmd/go/internal/par/work.go:160 +0x125
cmd/go/internal/par.(*ErrCache[...]).Do(0x0?, {{0x7ff7bfefef25?, 0xc00020c340?}, {0xc0000131e8?, 0xc00028c000?}}, 0xc00028e000?)cmd/go/internal/par/work.go:118 +0x4f
cmd/go/internal/modfetch.Download({0x1789e70?, 0x1b2dce0}, {{0x7ff7bfefef25?, 0x7?}, {0xc0000131e8?, 0x78?}})cmd/go/internal/modfetch/fetch.go:54 +0x13a
cmd/go/internal/modload.fetch({0x1789e70, 0x1b2dce0}, {{0x7ff7bfefef25?, 0x1789e70?}, {0xc0000131e8?, 0xc000026360?}})cmd/go/internal/modload/import.go:757 +0x345
cmd/go/internal/modload.QueryPattern.func4.1({0x1789e70, 0x1b2dce0}, {0x7ff7bfefef25, 0x36})cmd/go/internal/modload/query.go:723 +0x305
cmd/go/internal/modload.queryPrefixModules.func1({0x7ff7bfefef25?, 0x0?}, 0xc00021c000)cmd/go/internal/modload/query.go:813 +0x57
created by cmd/go/internal/modload.queryPrefixModules in goroutine 1cmd/go/internal/modload/query.go:812 +0x127sl-> sl1->unzip /Users/albert/go/pkg/mod/cache/download/github.com/golangci/golangci-lint/v2/cmd/golangci-lint/@v/v2.99.1.zip: github.com/golangci/golangci-lint/v2/cmd/golangci-lint@v2.99.1: invalid version: should be v0 or v1, not v2
2.6. 由于debug.stack只能打印出本文件的链路,无法自动下钻,定位到checkBip方法后,进到方法里再添加debug.stack

img

2.7. Check方法

img

2.8. 写了个单测,SplitPathVersion方法拿到的pathmajor是空字符串

img

2.9. CheckPathMajor方法里,v为v2.99.1,而pathmajor为空字符串。根据方法里的判断,如果pathmajor为空字符串,那么版本应该为v0或者v1, 而v=v2.99.1,导致报错

img

3. 原因总结

问题原因在于,SplitPathVersion方法拿到的path是github.com/golangci/golangci-lint/v2/cmd/golangci-lint,解析出来pathMjaor为空字符串,CheckPathMajor方法里判定应该是V0或V1。正确的SplitPathVersion拿到的入参应该是github.com/golangci/golangci-lint/v2,入参没有做处理导致出问题

4. 解决方法

由于这个是go源码的问题,不好直接改动go源码,需要自己写个脚本,下载源代码,使用源代码编译安装

http://www.lryc.cn/news/603314.html

相关文章:

  • Vulkan入门教程 | 第二部分:创建实例
  • Docker用Web应用实例深入容器
  • Go语言实战案例-判断二叉树是否对称
  • 本地安装 SQLite 的详细步骤
  • p5.js 矩形rect绘制教程
  • SpringBoot整合RocketMQ(rocketmq-client.jar)
  • Python day28
  • 【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能
  • 2025年科研算力革命:8卡RTX 5090服务器如何重塑AI研究边界?
  • 0基礎網站開發技術教學(一) --(前端篇)--
  • 思途SQL学习 0729
  • 【CUDA显存不足的问题】
  • ironSource Ads Bidding 现已正式加入TopOn 聚合平台
  • 博弈论03——混合纳什均衡的收益求法
  • 【Linux入坑(一)—全志T133开发板适配欣瑞达LVDS 7寸(800*480)屏幕】
  • 函数对象 vs 函数指针 vs lambda:该用哪个才高效?
  • python学习DAY26打卡
  • Java高级技术知识点
  • GitLab的安装及使用
  • 路由器路由协议详解:从 RIP 到 OSPF 的技术演进
  • 理解Transformer解码器
  • 【术语扫盲】MCU与MPU
  • 《HCIA-Datacom 认证》希赛三色笔记:Vlan间三层通信过程解析
  • 高级08-Java JVM调优:优化你的Java应用
  • 面向对象系统的单元测试层次
  • 医疗AI新基建:MCP与A2A协议的破局与前瞻
  • MySQL——MVCC
  • Django自带的加密算法
  • 汇总10个高质量免费AI生成论文网站,支持GPT4.0和DeepSeek-R1
  • 云端文档管理新纪元:Paperless-ngx与cpolar打造的无边界文件生态