请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

正在回答

1回答

在go mod 模式下,如果项目根目录下存在vendor目录,则使用go build编译时会默认到vendor目录下查找所有依赖的包,即使删除vendor下其他包以及执行go mod vendor 时在vendor.txt目录下生成的modules.txt文件的包信息,依然是无法成功执行go build。windows10下go1.13版本和go1.16版亲测是无法构建成功的,会抛出类似 github.com/astaxie/beego@v1.12.3: is explicitly required in go.mod, but not marked as explicit in vendor/modules.txt 这种异常。

go mod vendor的推荐用法是生成vendor目录后,在执行go build 时指定参数 -mod=vendor来使用vendor中的包,从而在某些网络不通的环境下可以避免走网络代理去拉包。
而且即使两种方式可以共存也不建议这样做,多种包管理方式共存会导致包管理混乱还可能导致版本兼容问题。

对于一些第三方包,为了防止其删除了指定版本导致引用这些包的项目不稳定的问题,建议搭建内部的goproxy服务,所有用到的包缓存一份到内部的goproxy服务。
或者将这些包git clone 下来放到项目指定目录,使用go mod replace的方式导入本地路径的中包

1 回复 有任何疑惑可以回复我~
  • 提问者 天空蓝丶 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2023-07-26 09:02:09
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号