json - 如何在Go中显示来自API的JSON响应?

标签 json api go

我正在调用一个小的API,该API会返回一个带有Todo对象的JSON响应。如何在Go网络服务器上显示该内容?现在,所有显示的是我硬编码的“Todo”。如何用API JSON响应代替?
这是代码:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
)

// Todo Structure
type Todo struct {
    userID    int
    id        int
    title     string
    completed bool
}

func main() {
    http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, "<h1>Todo</h1>")
    })

    response, err := http.Get("http://jsonplaceholder.typicode.com/todos/1")

    if err != nil {
        fmt.Print(err.Error())
        os.Exit(1)
    }

    responseData, err := ioutil.ReadAll(response.Body)
    if err != nil {
        log.Fatal(err)
    }
    fmt.Println(string(responseData))

    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

最佳答案

您必须编写一个委派的函数来从外部网站检索数据。比使用http.HandleFunc来在端点上公开该方法,这里是一个示例:

package main

import (
    "fmt"
    "io/ioutil"
    "log"
    "net/http"
    "os"
)

// Todo Structure
type Todo struct {
    userID    int
    id        int
    title     string
    completed bool
}

func main() {
    http.HandleFunc("/hello", func(w http.ResponseWriter, r *http.Request) {
        fmt.Fprintf(w, callHTTP())
    })

    if err := http.ListenAndServe(":8080", nil); err != nil {
        log.Fatal(err)
    }
}

func callHTTP() string {
    var (
        response     *http.Response
        err          error
        responseData []byte
    )
    if response, err = http.Get("http://jsonplaceholder.typicode.com/todos/1"); err != nil {
        fmt.Println(err.Error())
        os.Exit(1)
    }

    if responseData, err = ioutil.ReadAll(response.Body); err != nil {
        log.Fatal(err)
    }
    ret := string(responseData)
    fmt.Println(ret)
    return ret
}
注意:
避免在生产中使用默认的http客户端。您可以尝试一些HTTP框架,例如GIN。我更喜欢fasthttp,在这里您可以查看一些代码作为示例:https://github.com/alessiosavi/StreamingServer

关于json - 如何在Go中显示来自API的JSON响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63759889/

相关文章:

json - 由于 CSRF 检查,REST API 同时发布两个具有不同属性的请求失败并显示 403 状态代码

python - 为什么我不能通过 id 更新嵌套序列化器?

api - 通过 YouTube API 上传视频

python - 来自另一个 API python 的 API 调用

types - GoLang 类型开关中变量 "t"的实际类型是什么?

go - 将多值分配给结构文字

java - HTTP 状态 415 - 将数据从 ajax 作为 json 传递到 Restfull 服务器时出现不支持的媒体类型错误

php - 如何使用php将mysql数据提取为json

sql - Postgresql根据其JSONB字段值总和更新记录列

go - 选择特定列时如何获取对应的字段?