栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Go语言

解决go项目编译报错go.mod: no such file or directory

Go语言 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

解决go项目编译报错go.mod: no such file or directory

目录

问题背景

解决方案

在线环境下

离线环境下



问题背景


mod模式的项目进行编译,报错第三方库下找不到go.mod文件。


解决方案

首先确认$GOPATH目录是什么,举例如/a/b,下边正常情况下有src、pkg、bin三个目录,其中前面两个目录必须。
mod模式的项目所下载的依赖会放到/a/b/pkg/mod下。
(编译任何mod项目时)


在线环境下

1,原有的go.mod文件的require内容可以copy出来,然后删除项目原有的go.mod和go.sum文件(重命名也可),
    如果操作前缺失go.mod也没关系;
2,确认GO111MODULE开关是否开启,如果没有则需要开启:

go env -w GO111MODULE=on   或   export GO111MODULE="on"

如果提示:warning: go env -w GO111MODULE=... does not override conflicting OS environment variable
表明环境变量中已经设置过该变量,此时查看/etc/profile文件,文件尾肯定是之前设置过的环境变量,
如果是off则将

export GO111MODULE="off"  
改为   
export GO111MODULE="on"

3,项目目录下 go mod init,会产生一个空的go.mod文件
4,执行go mod tidy整理依赖,执行时也可携带当前编译的go版本,如:go mod tidy -go=1.16,此时会先finding
    如果mod目录下有待下载的包,则会有found字样出来;如果没有则出现download字样进行下载;
5,进行编译:如果提示no required module provides package ... to add it:  则将前面copy的mod内容粘贴到go.mod文件中:
    填充go.mod文件方式分为两种,linux下手动require添加进去,goland下会自动填充到mod文件;
    补充go.mod文件后,继续go mod tidy
6,再次编译即可成功


离线环境下

离线环境下无法拉取依赖包,因此需要在正常可编译的环境下拉取好依赖,打包后传到离线环境下编译。

1,正常可编译的环境下进行编译,将mod目录打压缩包;(一定要确认打的包完整)
2,离线环境上,上传、解压到的$GOPATH/pkg/mod目录下,确认离线环境的GO111MODULE是开启状态;
3,编译即可。如果mod下的包都完整,则编译成功,结束。
    否则会报如题的报错go.mod: no such file or directory,作者的报错就是这一步产生的。继续看第4步;
4,如果继续报该错,则必然是包不完整,此时按第一种“在线环境下”的方案去处理,删掉原有的go.mod重新编译、整理依赖、给mod目录打包
5,上传到离线环境重新编译即可成功。

作者两种情况均亲历亲为趟过了浑水,尤其离线环境时不要怕麻烦,第一次编译后打包传到离线环境结果编译没通过,
原因就是包不完整,第二次编译发现又下载了部分包,因此总结后希望大家遇到时都能尽快解决这个问题!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/902759.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号