我从IpfsNode.Bootstrap获得无效的内存地址或空指针取消引用 我假设Bootstrap Run中有一些panic ,但我在这里做错了什么吗? 还是有什么问题呢? 我使用的是Kubo v0.20.0 以下是我的代码:

package main

import (
    "context"
    "fmt"

    "github.com/ipfs/kubo/config"
    "github.com/ipfs/kubo/core"
    "github.com/ipfs/kubo/core/bootstrap"
)

func main() {
    ctx := context.Background()
    conf := core.BuildCfg{}
    node, err := core.NewNode(ctx, &conf)
    if err != nil {
        panic(err)
    }
    peers, err := config.DefaultBootstrapPeers()
    if err != nil {
        panic(err)
    }
    bs_conf := bootstrap.BootstrapConfigWithPeers(peers)
    err = node.Bootstrap(bs_conf) // this gets nil pointer dereference
    fmt.Println("THIS LINE WILL NOT PRINT")
    if err != nil {
        panic(err)
    }
}

完整的错误是:

panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x40 pc=0xee49eb]

goroutine 69 [running]:
github.com/ipfs/kubo/core/bootstrap.bootstrapRound({0x18bf1d8?, 0xc0000b05f0?}, {0x0, 0x0}, {0x0?, 0x0?, 0x0?, 0xc0006240c0?})
        /home/axel/go/pkg/mod/github.com/ipfs/kubo@v0.20.0/core/bootstrap/bootstrap.go:118 +0xab
github.com/ipfs/kubo/core/bootstrap.Bootstrap.func1({0x18cbd58?, 0xc0006226c0?})
        /home/axel/go/pkg/mod/github.com/ipfs/kubo@v0.20.0/core/bootstrap/bootstrap.go:89 +0xdc
github.com/jbenet/goprocess.(*process).Go.func1()
        /home/axel/go/pkg/mod/github.com/jbenet/goprocess@v0.1.4/impl-mutex.go:134 +0x36
created by github.com/jbenet/goprocess.(*process).Go
        /home/axel/go/pkg/mod/github.com/jbenet/goprocess@v0.1.4/impl-mutex.go:133 +0x238
exit status 2

推荐答案

我在GitHub上从一个贡献者那里得到了一些帮助,以下是他的回答:

您的问题似乎是使用conf:=core.BuildCfg{},它会将BulidCfg.Offline设置为FALSE,这意味着您将不会有一个实例化的libp2p node 来 bootstrap ,这会给您一个空引用异常,因为您正在try 使用一个不存在的libp2p网络主机进行 bootstrap .

如果您将OFFINE设置为TRUE,它将不再panic ,因为主机将启动.

这就是说,我不确定您到底想做什么,也许使用Kubo作为库对您来说已经足够了.但是,您可能更适合使用类似GitHub-IPFS/boxo的工具:用于构建IPFS应用程序和实现的参考库.如果您计划在Go中构建一个定制的IPFS应用程序.

有一份相对较新的文档描述了开发人员在决定如何从Kubo迁移到类似的版本时可能会做出的一些权衡,但在Kubo/Customizing.md的master·ipf/Kubo·gihub中更具可配置性.

https://github.com/aschmahmann

Go相关问答推荐

Kafka消费者在需要时不会暂停

Go Regexp:匹配完整的单词或子字符串,或者根本不匹配

如何在gofr发起的服务间调用请求中添加Authorization Header?

golang 的持久隐蔽服务

创建服务时云运行触发器执行失败

如何使用gopher-lua定义一个Lua函数,该函数有一个预定义的表作为param,Lua脚本可以在其中访问该函数中的表?

包裹网.Conn导致挂起读取

如何解析Go-Gin多部分请求中的 struct 切片

为什么我只收到部分错误而不是我启动的 goroutines 的所有错误?

设置指向空接口的指针

如何使用带有方法的字符串枚举作为通用参数?

如何将 npm 安装进度条通过管道传输到终端?

go-libp2p - 从流中接收字节

如何使用 Go 获取 X11 中的窗口列表

Golang:每个键具有多个值的映射

如何在 Unmarshal 中使用泛型(转到 1.18)

Dynamodb.ScanInput - 不能使用expr.Names()(类型 map[string]*string)作为类型 map[string]string

为什么 Go 中的 maps.Keys() 将 map 类型指定为 M?

为什么在 goroutine 中声明时,benbjohnson/clock 模拟计时器不执行?

空接口与泛型接口有何不同?