代码之家  ›  专栏  ›  技术社区  ›  Louis Thibault

为什么在这个libp2p代码中会出现类型错误?

  •  1
  • Louis Thibault  · 技术社区  · 7 年前

    libp2p.Host 实例。为此,我需要一个 peerstore.PeerInfo . 做这件事的一个明显的方法是 multiaddr.Multiaddr 返回的实例 Host.Addrs 并将其传递给 peerstore.InfoFromP2pAddr .

    这里有一些代码可以做到这一点:

    package main
    
    import (
        "github.com/SentimensRG/ctx"
        "github.com/SentimensRG/ctx/sigctx"
    
        libp2p "github.com/libp2p/go-libp2p"
        pstore "github.com/libp2p/go-libp2p-peerstore"
    )
    
    var c = ctx.AsContext(sigctx.New())
    
    func main() {
        h0, err := libp2p.New(c)
        if err != nil {
            panic(err)
        }
    
        h1, err := libp2p.New(c)
        if err != nil {
            panic(err)
        }
    
        addr0 := h0.Addrs()[0]
        peerinfo, _ := pstore.InfoFromP2pAddr(addr0)  # type error here
    }
    

    # command-line-arguments
    01-basic-conn/main.go:25:39: cannot use addr0 (type "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr) as type "github.com/multiformats/go-multiaddr".Multiaddr in argument to "github.com/libp2p/go-libp2p-peerstore".InfoFromP2pAddr:
        "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr does not implement "github.com/multiformats/go-multiaddr".Multiaddr (wrong type for Decapsulate method)
            have Decapsulate("gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr) "gx/ipfs/QmYmsdtJ3HsodkePE3eU3TsCaP2YvPZJ4LoXnNkDE5Tpt7/go-multiaddr".Multiaddr
            want Decapsulate("github.com/multiformats/go-multiaddr".Multiaddr) "github.com/multiformats/go-multiaddr".Multiaddr
    

    这似乎与 gx gx recommended way ,即跑步 make && make deps 从libp2p根开始,在语义上等同于:

    gx --verbose install --global
    gx-go rewrite
    

    为了编译我的程序,我必须做什么?

    0 回复  |  直到 7 年前