Почему я получаю ошибку типа в этом коде libp2p? - PullRequest
0 голосов
/ 21 октября 2018

Я пытаюсь инициализировать соединение между двумя 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 было при установке libp2p рекомендованным способом , а именно при запуске make && make deps из корня libp2p, что семантически эквивалентно:

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

Что дает? Что мне нужно сделать, чтобы скомпилировать мою программу?

...