Golang如何从旧库迁移到新库?
Golang如何从旧库迁移到新库?
最近我正在尝试使用Go构建一个P2P网络。起初我使用了libp2p,但该仓库在GitHub上已被归档。于是有人建议我迁移到libp2p-core。现在我正努力将以下代码迁移到新的库中,有人能帮帮我吗?
golog "github.com/ipfs/go-log"
libp2p "github.com/libp2p/go-libp2p"
crypto "github.com/libp2p/go-libp2p-crypto"
host "github.com/libp2p/go-libp2p-host"
net "github.com/libp2p/go-libp2p-net"
peer "github.com/libp2p/go-libp2p-peer"
pstore "github.com/libp2p/go-libp2p-peerstore"
ma "github.com/multiformats/go-multiaddr"
gologging "github.com/whyrusleeping/go-logging"
更多关于Golang如何从旧库迁移到新库?的实战教程也可以访问 https://www.itying.com/category-94-b0.html
这听起来像是一个独立的话题。我建议您发布一个新主题,以便让更多人看到您的问题。现有的讨论串越长,关注的人就越少。
更多关于Golang如何从旧库迁移到新库?的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
嗨,克里斯,我创建了一个新主题:https://forum.golangbridge.org/t/how-to-add-persistance/24267 你能帮帮忙吗?
感谢您那天的回复。我相信我尝试自己修复了它,并且在一些帮助下,我确实搞定了。代码运行得非常完美!
不过,看起来我仍然遇到了一些问题,这次实际上是关于日志记录器的。我不确定应该在这里提出这个问题,还是应该开一个新的话题。
感谢您的回复!
你好 @thecow_milk,欢迎来到论坛。
我有些难以理解你的请求,特别是以下几点:
- 是谁告诉你 go-libp2p 在 GitHub 上被归档了?它绝对没有被标记为归档,实际上相当活跃(最后一次提交是在 2 天前)。也许你根本不需要迁移。
- 你能用更技术性的术语描述一下“在尝试从这些(包列表)迁移到新库时遇到困难”吗?
- “那些人”是谁?如果他们属于 libp2p 团队,他们可能是帮助你从他们的一个库迁移到另一个库的最佳资源。
供参考,GitHub 上被归档的仓库在页面顶部会有一个“已归档”的横幅,并且在名称附近也会有“已归档”的标签,像这样:

感谢您的澄清!我现在能更清楚地看到问题了。
确实,github.com/libp2p/go-lib-p2p-net 在 GitHub 上已被归档,而 pkg.go.dev 上的模块文档建议改用 go-libp2p-core/network。
因此,这似乎比将整个 go-libp2p 替换为 go-libp2p-core 的工作量要小得多。
从 go-libp2p-net 迁移到 go-libp2p-core/network 应该很简单。旧包中的所有函数和类型都存在于新包中,或者(对于 AwaiteEOF 和 FullClose 而言)存在于 go-libp2p-core/helpers 中。
因此,我建议采取以下步骤:
将
import github.com/libp2p/go-libp2p-net
替换为
import github.com/libp2p/go-libp2p-core/network
然后检查您的代码是否仍然能够编译和运行。
如果出现错误,请打开已弃用的 go-libp2p-net 包的模块文档,并查看导致错误的函数或类型的描述。它会显示:
已弃用:请改用 blah blah。
然后您就可以知道应该使用哪个函数来修复错误。
请告诉我进展如何。
好的,感谢您的回复和提出的问题,我将逐一澄清。
-
实际上,您关于
go-libp2p未被归档的说法是正确的,这是我的一个错误。问题是当我运行代码时,出现了类似这样的错误:go run p2p_test.go # github.com/libp2p/go-libp2p-net ../pkg/mod/github.com/libp2p/go-libp2p-net@v0.1.0/deprecated.go:94:18: undefined: helpers.EOFTimeout ../pkg/mod/github.com/libp2p/go-libp2p-net@v0.1.0/deprecated.go:97:22: undefined: helpers.ErrExpectedEOF ../pkg/mod/github.com/libp2p/go-libp2p-net@v0.1.0/deprecated.go:101:9: undefined: helpers.FullClose ../pkg/mod/github.com/libp2p/go-libp2p-net@v0.1.0/deprecated.go:106:9: undefined: helpers.AwaitEOF因此,我在
go-libp2p-net仓库提交了一个 issue,其开发者表示该库已弃用,我应该切换到go-lib-core。但当我向一个 Go 语言的 Discord 服务器寻求支持时,他们却说这个库已被归档。 -
从技术角度讲,我希望将旧库的包替换为新的,例如从
libp2p "github.com/libp2p/libp2p"替换为libp2p "github.com/libp2p/libp2p-core"。 -
是的,“那些人”来自 libp2p 团队。我提出了这个问题,但他们没有帮助我。而且他们也没有任何关于如何操作的文档。
感谢您指出这些问题。
迁移到libp2p-core时,需要更新导入路径并调整部分API调用。以下是针对你提供的导入代码的迁移示例:
import (
golog "github.com/ipfs/go-log/v2"
libp2p "github.com/libp2p/go-libp2p"
crypto "github.com/libp2p/go-libp2p-core/crypto"
host "github.com/libp2p/go-libp2p-core/host"
network "github.com/libp2p/go-libp2p-core/network"
peer "github.com/libp2p/go-libp2p-core/peer"
pstore "github.com/libp2p/go-libp2p-core/peerstore"
ma "github.com/multiformats/go-multiaddr"
)
主要变化:
go-log升级到v2版本- 核心模块统一迁移到
go-libp2p-core路径下 net包重命名为network
代码迁移示例:
// 旧代码
priv, pub, err := crypto.GenerateKeyPair(crypto.RSA, 2048)
h, err := libp2p.New(context.Background(), libp2p.Identity(priv))
// 新代码
priv, pub, err := crypto.GenerateKeyPair(crypto.RSA, 2048)
h, err := libp2p.New(libp2p.Identity(priv))
// 流处理示例
func handleStream(s network.Stream) {
// 使用network.Stream替代net.Stream
}
// 设置流处理器
h.SetStreamHandler("/protocol/1.0.0", handleStream)
注意libp2p.New函数签名变化,移除了context.Background()参数。日志初始化也需要调整:
// 旧代码
golog.SetAllLoggers(gologging.INFO)
// 新代码
golog.SetAllLoggers(golog.LevelInfo)
peerstore相关操作保持不变,但导入路径已更新。多地址ma包保持不变。

