Извлечение определенных и последних данных с веб-сервера http с помощью golang - PullRequest
0 голосов
/ 29 мая 2019

Я пытаюсь создать простую цепочку блоков и сохранить данные на веб-сервере на основе этого урока https://github.com/mycoralhealth/blockchain-tutorial/tree/master/proof-work. Я хочу получить последнее значение с помощью запроса get, но только конкретные данные, а не все данные, например только PrevHash и Data.

Я попробовал этот код, чтобы отправить запрос на получение на сервер.

package main

import (

"net/http"
"log"
"io/ioutil"
"fmt"
"encoding/json")

func main() {

MakeRequest()
}

func MakeRequest() {

resp, err := http.Get("http://localhost:5555/")
if err != nil {
    log.Fatalln(err)
}

body, err := ioutil.ReadAll(resp.Body)
if err != nil {
    log.Fatalln(err)
}

var data map[string]interface{}
    err = json.Unmarshal([]byte(body), &data)
    if err != nil {
        panic(err)
    }
    fmt.Println(data["Data"])
}

Но это дает вывод: panic: json: cannot unmarshal array into Go value of type map[string]interface {}

Обновление: Это мои данные в веб-сервере. Я хочу получить значение параметра «Данные» на основе новейшего NoBlock, который всегда обновляется.

([]main.Block) (len=2 cap=2) {
(main.Block) {
NoBlock: (int) 0,
Timestamp: (string) (len=39) "2019-05-29 14:50:00.966201709 +0800 +08",
Data: (string) "",
Hash: (string) (len=64) "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9",
PrevHash: (string) "",
Difficulty: (int) 0,
Nonce: (string) ""
},
(main.Block) {
NoBlock: (int) 1,
Timestamp: (string) (len=39) "2019-05-29 14:50:12.891324534 +0800 +08",
Data: (string) (len=110) "3e19124ee3a459d5c6edcb9b2a37cf2c4febd2e3ab8a8628f1bfb197bdaf5accada8349d9a99cfbf7cdd1af003c14f7c5c004f53c1d231",
Hash: (string) (len=64) "b2aebe50c3ace8230cb8d839d4e36da8899a2d0f0a3c1dbc9e9c717f74ead464",
PrevHash: (string) (len=64) "5feceb66ffc86f38d952786c6d696c79c2dbc239dd4e91b46729d73a27fb57e9",
Difficulty: (int) 0,
Nonce: (string) (len=1) "0"
 }
}

Пожалуйста, помогите мне, спасибо.

1 Ответ

2 голосов
/ 29 мая 2019

Ваши данные тела - это массив JSON, поэтому демаршаллинг должен быть в массиве

var data []map[string]interface{} // add this to declaration
err = json.Unmarshal([]byte(body), &data)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...