Golang报错“error obtaining VCS status: exit status 128 Use -buildvcs=false to disable VCS stamping.”

问题描述

个人习惯,所有的代码相关文件都放在了一个文件夹下。
今天新建了一个Test的项目,准备写一些东西。
但是遇到了“error obtaining VCS status: exit status 128 Use -buildvcs=false to disable VCS stamping.”
在这里插入图片描述
电脑是Windows10,go 1.21.3 ,Goland2023.2.4。
在此问题之前没有进行任何相关升级,此问题出现时,其他项目依旧可以正常运行。

问题探索

根据直译,问题情况是“获取VCS状态时出错:退出状态128

使用-buildvcs=false禁用VCS冲压。”
简单来说,就是GO的版本有问题,所以禁用这个关于版本的检测即可。
附此环境变量介绍

具体来说,这个命令会将 GOFLAGS 环境变量设置为 -buildvcs=false。在 Go 中,GOFLAGS 变量用于传递额外的构建标志给 go 工具。在这种情况下,-buildvcs=false 是一个构建标志,用于指示构建过程中不进行版本控制系统(VCS)相关的操作,例如不获取或检查源代码库的元数据。

通过设置 GOFLAGS 环境变量,您可以全局地为 go 工具的构建过程指定额外的标志,而不必在每次构建时手动指定这些标志。这有助于在多个项目中共享相同的构建标志,或者在自动化构建过程中统一控制构建行为。

网上搜索,主要有这两个答案:

https://blog.youkuaiyun.com/SHELLCODE_8BIT/article/details/133469104

这个答案给出的方法就是修改了环境变量,关闭了检测。

https://blog.youkuaiyun.com/lakersssss24/article/details/124483684

这个答案给出的方法更简单粗暴,直接降版本…降到没冲突就完事了…
但他的评论区好像对他方法不是太喜欢…
在这里插入图片描述

解决的另一种可能

由于“在此问题之前没有进行任何相关升级,此问题出现时,其他项目依旧可以正常运行。”并且因为其他项目才是主要使用的,所以不想对环境变量甚至go的版本进行任何修改。
因此继续搜寻,发现了这篇文章
其中指出问题大概原因可能是“如果你是在一个 Git 目录下,且这个目录有一个坏掉的 .git 目录的情况下用 go build 之类的操作的话,就会遇到以上的问题”。
(具体原理请见原文,很有深度就不cv来了)。
检查我的目录:发现的确有一个.git文件夹,且我没有使用他…遂删除。
在这里插入图片描述
问题解决!
在这里插入图片描述

总结

此问题的原因是VCS版本控制相关,可能是因为自己升级Go版本原因,也可能是错误的.git文件初始化原因导致。
若自己有对go版本进行升级操作,则可以通过降级、禁用检测等方式尝试解决。
若无,则考虑是否是当前文件夹下有错误的.git文件初始化导致。删除该错误文件或更换路径新建即可。

这个错误通常出现在使用HTTP/2协议进行通信时,客户端或服务器在接收到END_STREAM帧后仍然发送了DATA帧。解决这个问题需要逐步排查以下几个方面: 1. **检查HTTP/2协议实现**: - 确保你的HTTP/2实现是正确的。Golang的标准库`net/http`已经实现了HTTP/2协议,但如果你使用了自定义的HTTP/2实现,可能需要检查代码。 2. **服务器端和客户端的协议版本**: - 确保服务器和客户端都正确协商了HTTP/2协议。如果服务器或客户端没有正确协商HTTP/2协议,可能会导致这种错误。 3. **检查中间件和代理**: - 如果你的请求经过了一些中间件或代理(如Nginx、HAProxy等),确保它们正确配置并支持HTTP/2协议。 4. **调试和日志**: - 使用调试工具和日志记录来查看请求和响应的详细流程。Golang的`net/http/httptrace`包可以帮助你跟踪HTTP请求的各个阶段。 5. **示例代码**: - 下面是一个简单的示例代码,展示如何使用Golang的标准库进行HTTP/2通信,并添加一些日志记录来帮助调试: ```go package main import ( "fmt" "net/http" "net/http/httptrace" "os" ) func main() { client := &http.Client{} req, _ := http.NewRequest("GET", "https://example.com", nil) trace := &httptrace.ClientTrace{ GotConn: func(connInfo httptrace.GotConnInfo) { fmt.Println("Got Conn: ", connInfo) }, WroteHeaders: func() { fmt.Println("Wrote Headers") }, WroteRequest: func(reqInfo httptrace.WroteRequestInfo) { fmt.Println("Wrote Request: ", reqInfo) }, GotFirstResponseByte: func() { fmt.Println("Got First Response Byte") }, } req = req.WithContext(httptrace.WithClientTrace(req.Context(), trace)) resp, err := client.Do(req) if err != nil { fmt.Println("Error: ", err) return } defer resp.Body.Close() fmt.Println("Response Status: ", resp.Status) } ``` 6. **更新Golang版本**: - 确保你使用的是最新版本的Golang,因为新版本通常会修复已知的bug和问题。 通过以上步骤,你应该能够定位并解决这个问题。如果问题仍然存在,建议在相关社区或论坛(如Golang的官方论坛或GitHub问题追踪器)寻求进一步的帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值