cannot find package “xxx“ in any of的通用解决方案

目录

问题背景

解决

通用解决方案


这个问题遇到频率还是比较高,这次总结出来,希望能让更多的人脱离苦海!

如有帮助,欢迎留下足迹哦!

问题背景

作者的问题:提示找不到的是工程内部自定义的包名

今天出了个奇怪的事情,编译项目提示cannot find package  "包名" in any of  其中提示找不到的包名是工程内已有的。

接连提示了好几行类似的信息。

我在本地开发时goland中使用插件与指定远程Linux机器进行了同步,目的即本地修改了的可以同步到Linux机器上,并在Linux下进行编译及其它操作。

经过仔细思考整个过程,终于发现了引起的原因:同步到远程Linux时目录是自己在/root下新建的目录,该目录并不在$GOPATH下:

看看$GOPATH的路径:

解决

把本地和远程同步的目录直接修改成$GOPATH下,即放好之后的新地址:/root/go/src/工程名   这样就OK了。

上面的问题是作者遇到的,作者的项目是一个非mod模式下的项目,原因就在于$GOPATH,当然各位看官的问题背景可能不一样,但原因基本相同。

通用解决方案

也就是说,项目非go mod模式时,项目需要放在$GOPATH目录下编译;

如果使用了module模式,则没有这个要求,但GO111MODULE开关必须打开。

这是通用规则。那如何确认当前项目是否是mod模式?  

1,查看该项目目录是否有go.mod和go.sum 文件,如果有则该项目使用的是mod模式,此时需要将GO111MODULE开关打开;

2,如果项目中没有go.mod和go.sum 文件,则需要将GO111MODULE开关关闭;

即模式要适配后再编译。

如何查看当前环境是否开启了GO111MODULE:

go env

查看GO111MODULE,结果为on则开启,off为关闭,auto为自动。

情况1

如果是mod项目, 模式关闭时分别去$GOROOT,$GOPATH目录下找包,如果以前没下载过 包到$GOPATH。

因此在GO111MODULE关闭的情况下编译会报这个错,此时需要将GO111MODULE打开:

set  GO111MODULE=on   

go  env -w  GO111MODULE=on

再次编译即可。

情况2

GO111MODULE开关匹配的情况下,提示找不到啥,就拉它的代码($GOPATH模式下一般需要go get,mod模式下编译时自动拉取/查询)。

可以先配置go代理:

export GOPROXY=https://goproxy.cn,direct

go  env -w GOPROXY=https://goproxy.cn,direct

然后重试,80%此时已成功。

如果依旧不行,继续走下面的:

执行 go get -u 库地址  

或手动进行:

cd  $GOPATH/src/xxx   

执行 git clone 该库git地址 

就能解决这个问题

多数是网络问题,也可换环境编译。

  • 6
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ProblemTerminator

您的鼓励将是作者最大的动力哦!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值