关于在Linux环境下在VSCode中配置Golang遇到的各种问题及解决方案

系统环境供参考
ArchLinux
内核版本 linuxzen-6.26
Go Version gcc-go 1.18 → go 1.20.2 **本次大无语事件的主角

突发奇想想要在Arch上配置个golang环境试试,因为有了之前在两台win上配置以及遇到很多问题的经验感觉还蛮有自信,没想到这次配置花了接近10h

因为之前在用yay连aur下载东西的时候要用到proxychains,而proxychains的官方文档表明这玩意必须使用gcc-go编译 gcc-go和go这俩包是相互冲突的,于是我的电脑上装的是gcc-go而不是go这个包,aur上的gcc-go只更新到了1.18这个版本

参考http://t.csdn.cn/f3nTk这位大佬的教程很顺利的配置好了除开delve(dlv)和gopls这两个module以外的其他东西,但是这两个死活装不上去,每次安装都会failed并且抛出一大堆错误
对于按照大佬的教程走且全部安完的普通用户,可能会出现vsc go拓展报错显示需要 go.mod 或者说 提示你目前的工作区域不在$GOPATH/src内的情况,请检查你的GO111MODULE这个环境变量是否在安装完毕后设置为空而不是on (注: go env设置环境变量的方法是 go env -w 变量名=value) ,这个问题出现的原因应该是因为在较高版本的go中开启这一项会使用工作区工作模式 (即go.work) 而非GOPATH工作模式 (即go.mod) ,对于较老版本的go可以通过开启实验性工作区模式解决,但是新版本工作区模式实际上已经转正,需要关闭GO111MODULE这一项来使用

接上条,换了七牛云,阿里云等提供的GOPROXY都无法解决问题,再次审视vsc给出的报错信息发现,居然不是因为下载错误,而是安装的时候出了问题,这时便可以肯定是安装的时候编译出问题了
经过一个多小时的尝试,偶然发现在aur/Community这个库里面有人提供了 delve 和 gopls 这两个包,使用pacman安装后成功解决问题

成功安装好delve和gopls后发现gopls和delve无法识别出fmt这个包,其他的内置包也是如此,于是我clone了github上的go,并把他设置为GOROOT,发现仍然无法识别出go的各项内置包,按理来说他应该会 显示无法正常import或者import成功,但是无论如何设置GOROOT始终显示无法 找到 src中的fmt
针对这个问题的解决方法是 将gcc-go卸载并替换为go这个软件包,并将github上clone过来的go文件夹设置为GOPATH,完美解决无法找到的问题

无法找到fmt包的问题解决了,但是又出现了fmt包导入失败的情况,vsc提示需要重新编译gopls和delve,直接点击后会发现又出现编译问题无法安装
这里的解决方法是在pacman里面先将delve和gopls包卸载,再重新安装一遍,再进vsc点击重新编译即可安装成功
问题出现的原因可能是gopls和delve包在安装的时候用的是gcc-go而非go导致vsc也没辙,也可能有gcc-go只更新到1.18的原因存在

至此大功告成!然后你就会不经意间发现你使用VSCode过后关机和重启会慢很多很多(,这里可以排除是watchdog的问题因为我先前已经禁用。观察显卡占用发现关闭VSCode之后这玩意还在后台跑着,并且一直让显卡呼呼呼转,可能是后台运行中的VSCode不配合shutdown导致只能等待固定时间后关机
我的解决方案是修改 /etc/systemd/ 中的system.conf和user.conf,将这两个配置文件中的DefaultTimeoutStopSec改成你想要他等待关机的时间,超过这个时间linux会强制结束所有进程然后关机,我设置的是20秒,记得去掉这一项前面的注释!!!!
重启电脑后,运行systemctl daemon-reexec让他重新加载一下system.conf即可完成配置应用

前文提到我装gcc-go是为了编译proxychains,linux大版本更新可能会需要你重新编译所有软件,所以到时候就把gcc-go安回来重新编译一次再装回go吧

网上有关gcc-go的资料很少,官网也没有详细介绍,能尽量不用还是尽量不用

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值