go module 导入本地嵌套包报错解决办法

现在换了一份工作,虽然还是做IT,但是与原来的行业毕竟不一样,有很多新东西需要学习。现在,每一天都很充实,所以很久没有更新博客了(给自己的懒惰,找个借口)
好了,言归正传,聊聊今天的主题------go module 导入本地嵌套包报错解决办法。其实网上有很多关于go module 导入本地包的教程,而且都写的挺好的(给大家推荐一篇我认为写的挺好的文章,https://blog.csdn.net/taoerchun/article/details/104827702)。这里我就不再重复这些内容了。今天,我主想写的是如何利用go module导入本地嵌套包这种特殊情况。
工程文件目录结构如下:
在这里插入图片描述

简单描述一下调用关系:
文件main.go 调用了文件mypackage.go的A函数;A函数又调用了文件logic.go的B函数。这种情况下,存在嵌套包含关系,采用https://blog.csdn.net/taoerchun/article/details/104827702 这篇文章中的方法就不行了(或者说这偏文章没有更进一步描述这种场景的解决方案)。那么具体会出什么问题呢?请看下图:
在这里插入图片描述

是的,会报“reading xxx/yyy/www/go.mod at revision v0.0.0: unknown revision v0.0.0”这个错误。一开始,我对报这个错误感到很奇怪。我已经在go.mod中明确申明使用本地包,怎么还报这个错误呢?go module应该一层一层自己去解析go.mod文件,发现是本地包就直接替换呀(而现实情况不是这样的)。后来和朋友交流后,他建议在cmd目录下的go.mod 做“同步依赖”。具体做法是:把FolderA文件夹下的go.mod里面的本地依赖,复制到cmd文件夹下的go.mod文件里(同理,如果有更多层嵌套调用,则需要将所有的本地包替换声明复制到cmd文件夹下的go.mod文件里)。(有点绕,看图吧)
在这里插入图片描述

这样做了后,go mod tidy,就没有报错了,也能编译通过了。另外对于,main.go直接在src目录下(不是放到cmd目录下),这种方法同样适用!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值