Go项目部署远程服务器报错《package xxx is not in std》问题排查与解决(全网疑难版)

问题描述

golang sdk版本:1.22

最近在部署本地Go项目到远程服务器时遇到了这个报错:package xxx is not in std

问题分析

这个报错的原因是Go程序在编译时,找不到依赖的包,然后去自己的标准库下面找,还是找不到所以报了这个错误。

这些罗列一些可能导致这个问题的原因以及解决办法:
1.go module配置问题,如果开启了go module,会根据go.mod文件中的配置去读取项目中的依赖项。如果没有开启则默认去${GoPath}目录下查找。开启go module的命令:

// 如果设置时遇到报错: warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
// 说明是环境变量冲突了,使用unset命令删除环境变量再重新设置: unset GO111MODULE
go env -w GO111MODULE=on

2.包名或者路径对不上,比如go.mod文件中module名称和go源文件中的包名不一致,尤其是导入项目自身的包时,需要以go.mod文件中的module名称开头,不过现在的IDE一般都能检测到这种情况,所以也比较少见。

不过,在我的case里,以上两个方法试了之后依旧还是报错。

问题解决

最后终于发现是因为没有对应的go文件导致的!

因为是使用zip命令直接打包本地源代码文件,然后上传到服务器解压后再编译。
打包命令如下

zip xxx.zip ./

因为没有加-r参数,遇到文件夹就直接跳过了,导致打成的zip包缺失了所有子目录下的go文件,编译的时候提示找不到包。

使用正确的打包命令,将子目录下的go文件都打进去即可:

zip -r xxx.zip ./

以上,问题解决。非常奇葩和低级的一个错误导致的问题,全网可能就我一个人遇到了吧[汗]

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值