Golang中无法找到提供gopkg.in/russross/blackfriday.v2包的模块
Golang中无法找到提供gopkg.in/russross/blackfriday.v2包的模块
我正在使用Go1.13。我的项目使用了gopkg.in/russross/blackfriday.v2,在初始化模块之前它运行正常。当我通过go mod init初始化模块后,项目无法运行。我遇到了以下错误:
go: finding gopkg.in/russross/blackfriday.v2 v2.0.1
go: finding gopkg.in/russross/blackfriday.v2 v2.0.1
build gitlab.com/edu/petstore/main: cannot load gopkg.in/russross/blackfriday.v2: cannot find module providing package gopkg.in/russross/blackfriday.v2
我该如何解决这个问题?
更多关于Golang中无法找到提供gopkg.in/russross/blackfriday.v2包的模块的实战教程也可以访问 https://www.itying.com/category-94-b0.html
很好
更多关于Golang中无法找到提供gopkg.in/russross/blackfriday.v2包的模块的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
如果提供的包没有与导入路径相冲突的 go.mod 文件,这很可能会实现。
您的IP地址表明您正在使用Go模块。Go模块是一个管理依赖版本的工具,而README文件要求您在使用此类工具时从GitHub导入。那么您尝试过从GitHub导入吗?
是的,他们是从 gopkg.in 导入的。这在 Go 模块环境下无法正常工作。
要么 fork 那个项目并修复导入,要么寻找另一个真正兼容模块的转换器。
NobbZ:
要么fork那个项目并修复导入
能否请您更详细地描述一下, fork之后我应该在哪里修复导入以及需要修复什么?
好的,你可以 fork mdtopdf 项目,并将所有对 blackfriday 的导入改为其在 GitHub 上的对应路径,同时将所有内部导入也改为指向你的 fork。
// 示例代码块
func main() {
fmt.Println("hello world")
}
如果 gopackages 旨在取代所有第三方依赖工具,那么在项目中同时保留另一个包管理工具和 gopackages 是否会造成冗余?
如果他们甚至无法提供使用该软件包的有效机制,我宁愿寻找其他选项来替代那个 blackfriday。
// 代码示例(如有需要可在此添加)
NobbZ:
它们是从 gopkg.in 导入的。这在 Go 模块环境下无法正常工作
最后一个问题,为什么从 gopkg.in 导入在 Go 模块环境下无法正常工作?
NobbZ:
但既然你已经在使用 Go 模块,有没有尝试过直接从 GitHub 导入
blackfriday而不是通过 gopkg.in?
我按照推荐的方式使用 go get 和 import "gopkg.in/russross/blackfriday.v2",但那是在模块出现之前。
你指的是这个意思吗?
NobbZ: 你是指 GitHub - hayajo/md2pdf: 将 Markdown 转换为 PDF 吗?
不,是指这个:https://github.com/mandolyte/mdtopdf
这个项目已经大约一年没有更新了,但似乎也存在一些兼容性问题。
你是否尝试过按照 README 中的说明直接从 github 导入:
虽然可以通过 gopkg.in 使用
go get命令获取gopkg.in/russross/blackfriday.v2,但我们强烈推荐使用诸如 [dep][7] 或 [Glide][8] 这类包管理工具,并采用语义化版本控制。使用包管理工具时,你应该导入github.com/russross/blackfriday并指定使用 2.0.0 版本。
// 代码示例保留原文
func main() {
fmt.Println("hello world")
}
现在我已经从GitHub导入并可以在使用模块的简单项目中使用它了。 但当我尝试将其与md2pfd一起使用时出现了问题:
go: 正在查找 gopkg.in/russross/blackfriday.v2 v2.0.1 go: 正在查找 gopkg.in/russross/blackfriday.v2 v2.0.1 build command-line-arguments: 无法加载 gopkg.in/russross/blackfriday.v2: 找不到提供该包的模块
我的导入语句:
import (
"fmt"
"log"
"github.com/mandolyte/mdtopdf"
"github.com/microcosm-cc/bluemonday"
"github.com/russross/blackfriday"
)
所以如你所见,这里存在问题…
Go模块的"发明"确实是为了淘汰所有那些第三方解决方案。不过,那些曾经使用gopkg.in或其他第三方解决方案的项目早在很久以前就决定支持它们,现在至少需要承担过渡期间的遗留维护成本,这个过渡阶段可能会持续数年,直到Go 1.12之前的版本从现存的Linux发行版中消失。
技术债务、遗留支持…这些都是IT领域熟知的概念和重大难题,而且很难解决…
我还没有尝试过那个包[*],但既然你已经在使用Go模块,有没有试过直接从GitHub导入blackfriday而不是通过gopkg.in来使用它?
[*] 我当前的机器没有可用的新版Go。
编辑
如果你即使使用GitHub导入方式也无法让它在Go模块下正常运行,欢迎在他们的代码仓库中提交问题。Go模块最终将取代所有其他工具,因为这是官方提供的工具。其他所有方案都只能算是临时替代品…
这个问题通常是由于Go模块系统无法正确解析gopkg.in/russross/blackfriday.v2包的模块路径导致的。在Go 1.13中,gopkg.in的模块支持需要特定的配置。
首先,检查你的go.mod文件,确保模块路径正确。然后尝试以下解决方案:
解决方案1:使用replace指令
在go.mod文件中添加replace指令,将gopkg.in路径映射到GitHub上的实际仓库:
module your-module-name
go 1.13
require (
gopkg.in/russross/blackfriday.v2 v2.0.1
)
replace gopkg.in/russross/blackfriday.v2 => github.com/russross/blackfriday/v2 v2.0.1
解决方案2:直接使用GitHub路径
修改你的导入语句,直接使用GitHub路径:
import "github.com/russross/blackfriday/v2"
然后在go.mod中:
module your-module-name
go 1.13
require (
github.com/russross/blackfriday/v2 v2.0.1
)
解决方案3:更新依赖并清理缓存
运行以下命令:
go mod tidy
go clean -modcache
go mod download
解决方案4:检查代理设置
确保GOPROXY设置正确:
go env -w GOPROXY=https://goproxy.cn,direct # 如果在中国使用国内代理
或者:
go env -w GOPROXY=https://proxy.golang.org,direct
完成上述任一解决方案后,运行go mod tidy来同步依赖关系。如果问题仍然存在,检查你的网络连接和Go版本兼容性。

