Unmarshall json или переход к структуре Go с полем интерфейса - PullRequest
0 голосов
/ 28 апреля 2020

У меня есть структура, в которой merkleTree.MerkleProof - это интерфейс, который реализуется mTree.Proof:

type Checkpoint struct {
    Leaves      []Leaf
    MerkleProof merkleTree.MerkleProof
}

type MerkleProof interface {
    Verify(leafHash, treeRoot []byte) 
}

type Proof struct {
    Hashes  [][]byte
    Path    []byte
}

Я кодирую структуру Checkpoint (со структурой Proof в поле MerkleProof) в файл с JSON или Gob и все идет гладко; данные закодированы правильно.

"Proof": {
    "Hashes": [
        "f8kfN1YkWAwRpj1wbX2izMGC5DbHel//d5y5hceamAc="
    ],
    "Path": "AA=="
}

Когда я go декодирую те же закодированные данные, я получаю следующую ошибку:

json: cannot unmarshal object into Go struct field Checkpoint.MerkleProof of type merkleTree.MerkleProof

Gob дает похожую ошибку. Как заставить декодеры распознать, что структура Proof реализует MerkleProof и может быть сохранена в поле?

...