我正在调用一个小的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/