当前位置: 首页 > 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.dtcms.com/a/304620.html

相关文章:

  • React图标库推荐与选择建议
  • 【Spring-cloud-OpenFegin源码解析】
  • VitePress学习笔记
  • 编程算法在金融、医疗、教育、制造业的落地应用。
  • 云服务器上基于lora微调Qwen2.5-VL-7b-Instruct模型之Lora微调代码讲解
  • Netty中InternalThreadLocalMap的作用
  • Rust实现GPU驱动的2D渲染引擎
  • Vue3 学习教程,从入门到精通, Vue3 自定义指令语法知识点及案例(20)
  • c++ nlohmann/json读写json文件
  • JavaWeb学习打卡18(JDBC案例详解)
  • ansible 使用更高版本的python版本
  • Python中的决策树机器学习模型简要介绍和代码示例(基于sklearn)
  • 【牛客网C语言刷题合集】(五)——主要二进制、操作符部分
  • GO 开发环境安装及配置
  • Claude Code 使用教程(对接智谱模型)
  • 84、【OS】【Nuttx】【启动】栈溢出保护:asm 关键字(下)
  • SpringBoot集成Quzrtz实现定时任务
  • 【目标检测】小样本度量学习
  • 记录一个TI DSP编译器的Bug
  • CentOS安装ffmpeg并转码视频为mp4
  • 预过滤环境光贴图制作教程:第四阶段 - Lambert 无权重预过滤(Stage 3)
  • 预过滤环境光贴图制作教程:第一步 - HDR 转立方体贴图
  • Android Compose 自定义组件完全指南
  • 对College数据进行多模型预测(R语言)
  • 《React与Vue构建TODO应用的深层逻辑》
  • 【lucene】SegmentCoreReaders
  • linux_前台,后台进程
  • LeetCode热题100——155. 最小栈
  • (LeetCode 面试经典 150 题) 150. 逆波兰表达式求值 (栈)
  • 电脑主机显示的python版本是3.8.6,但是我在控制面板没有找到,想删除不知道怎么操作怎么办