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

15 回复

很好

更多关于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 那个项目并修复导入,要么寻找另一个真正兼容模块的转换器。

你指的是 https://github.com/hayajo/md2pdf 吗?

这个项目已经四年没有更新了,我预计会有很多不兼容的问题。

如果你指的是其他东西,需要详细说明一下。

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 getimport "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版本兼容性。

回到顶部