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

0x00 问题场景

go编译时,定制软件使用依赖模块报错。

语言版本
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'
  • 1

goland定制软件编辑窗口也提示错误:

Cannot resolve directory 'github' 
  • 1

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
  • 1

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

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

现在可以运行

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

使用go install 前需要初始化当前主目录(即主模块)

go mod init gotest
  • 1

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
  • 1

参考文献


网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发