ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

报错no required module provides package github.com/xx的解决方案

2022-02-20 16:34:44  阅读:465  来源: 互联网

标签:GOPATH GO111MODULE github package Modules go 报错 Go


0x00 问题场景

go编译时,使用github依赖模块报错。

语言版本
Gogo1.16.4 windows/amd64

0x01 问题描述

通过go get安装第三方github模块后运行报错,错误信息如下:

main.go:4:2: no required module provides package github.com/gin-gonic/gin: go.mod file not found in current directory or any parent directory; see 'go help modules'

goland编辑窗口也提示错误:

Cannot resolve directory 'github' 

0x02原因分析:

Go在2009年发布之初没有自己的包管理器。使用go get命令把需要依赖的模块下载到$GOPATH/src目录下。此时并没有版本控制,只能下载master的版本。

Go Modules是在Go 1.11版本中引入的。此时从git上下载的依赖库不再保存在GOPATH中,而是存到当前项目中,并使用go.mod文件跟踪依赖库和其版本。GO111MODULE这个环境变量也是此时引入的,作为控制是否开启Go Modules的开关。

明眼人一看就知道,Go Modules和GOPATH是两个对立的依赖存储和搜索方式。

从 Go 1.16 开始,默认行为是GO111MODULE=on,这意味着如果您想继续使用旧GOPATH方式,则必须强制 Go 不使用 Go Modules 功能:

export GO111MODULE=off

Go 1.16 中最好的消息是我们终于获得了一个专门的命令来安装 Go 工具,而不是依赖于go get不断更新你的go.mod. 代替:

# Old way
(cd && go install golang.org/x/tools/gopls@latest)

现在可以运行

go install golang.org/x/tools/gopls@latest

Go 1.17 于 2021 年 8 月 16 日发布。至于 1.16,GO111MODULE=on是默认行为,GO111MODULE=auto相当于GO111MODULE=on. 如果您仍想使用该GOPATH方式,则必须强制 Go 不使用 Go Modules 功能使用GO111MODULE=off

0x03 解决方案:

方法一(推荐):

是用go install 代替go get 下载第三方模块

方法二(不推荐):
关闭GO111MODULE配置

go env -w GO111MODULE=auto

参考文献

为什么到处都是 GO111MODULE,以及关于 Go 模块的一切(随 Go 1.17 更新
GO111MODULE作用

在这里插入图片描述

标签:GOPATH,GO111MODULE,github,package,Modules,go,报错,Go
来源: https://blog.csdn.net/counsellor/article/details/123031707

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有