问题描述
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 ./
以上,问题解决。非常奇葩和低级的一个错误导致的问题,全网可能就我一个人遇到了吧[汗]