Строка из указателя структуры - PullRequest
0 голосов
/ 06 апреля 2019

Будучи студентом го, я столкнулся с этой проблемой.

Моя конечная цель - преобразовать *blockchain в допустимую строку JSON.

Мои структуры:

type Blockchain struct{
    blocks []Block `json:"blocks"`
    difficulty int `json:"difficulty"`
}

type Block struct{
    index int `json:"index"`
    timestamp string `json:"timestamp"`
    data string `json:"data"`
    previousHash string `json:"previousHash"`
    hash string `json:"hash"`
    nonce int `json:"nonce"`
}   

У меня есть следующий код:

var s = fmt.Sprintf("%#v", *blockchain)
print(s)

Что дает мне следующее:

main.Blockchain {blocks: [] main.Block {main.Block {index: 1, метка времени: "2019-04-06 12:50:54", данные: "Блок генеза", previousHash: "", хэш: "eca16d7bdd20a91f471fc3231fa5de7d892fb540789673d64f29a7b93719b74b", Nonce: 0}, {main.Block индекс: 2, метка времени: "2019-04-06 12:50:54", данные: "d.duck", previousHash: "eca16d7bdd20a91f471fc3231fa5de7d892fb540789673d64f29a7b93719b74b", хэш: "2096ccfa6fdd8305f0e31c2e6858173a21764be4c8e1d3d50c9c31193bf06a2a", Nonce: 0}, {main.Block индекс: 3, метка времени: "2019-04-06 12:50:54", данные: "Дамбо", previousHash: "2096ccfa6fdd8305f0e31c2e6858173a21764be4c8e1d3d50c9c31193bf06a2a", хэш: "d76d4a002c6dde01009e3122aa1ccfb455e1d453ac83e2a0eb123c6080943cdb", nonce: 0}}, сложность: 4}

Очевидно, неверный JSON.

Есть предложения?

Я также попробовал следующее:

var json, err = json.Marshal(*blockchain)

if err != nil{
    panic(err.Error())
}
var s = fmt.Sprintf("%#v", json)

print(s)

Это дало мне следующее:

[]byte{0x7b, 0x7d}

1 Ответ

1 голос
/ 06 апреля 2019

Поля структур должны быть экспортированы (начинаются с заглавной буквы). Это необходимо, потому что для сортировки в JSON используется отражение, а для этого необходимо экспортировать поле (быть видимым).

Также json.Marshal первое возвращаемое значение - JSON.

package main

import (
    "encoding/json"
    "fmt"
    "log"
)

type Blockchain struct {
    Blocks     []Block `json:"blocks"`
    Difficulty int     `json:"difficulty"`
}

type Block struct {
    Index        int    `json:"index"`
    Timestamp    string `json:"timestamp"`
    Data         string `json:"data"`
    PreviousHash string `json:"previousHash"`
    Hash         string `json:"hash"`
    Nonce        int    `json:"nonce"`
}

func main() {
    bc := &Blockchain{
        Blocks: []Block{
            Block{},
        },
        Difficulty: 1,
    }
    v, err := json.Marshal(bc)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(v))
}

Это печатает:

{"blocks":[{"index":0,"timestamp":"","data":"","previousHash":"","hash":"","nonce":0}],"difficulty":1}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...