package main
import (
"encoding/json"
"html/template"
"log"
"net/http"
)
type todo struct {
UserID int `json:"userId"`
ID int `json:"id"`
Title string `json:"title"`
Completed bool `json:"completed"`
}
var form = `
Todo #{{.ID}}
{{printf "User %d" .UserID}}
{{printf "%s (status: %t)" .Title .Completed}}
`
func handler(w http.ResponseWriter, r *http.Request) {
const base = "https://jsonplaceholder.typicode.com/"
resp, err := http.Get(base + r.URL.Path[1:])
if err != nil {
http.Error(w, err.Error(), http.StatusServiceUnavailable)
return
}
defer resp.Body.Close()
var item todo
if err = json.NewDecoder(resp.Body).Decode(&item); err != nil {
http.Error(w, err.Error(), http.StatusServiceUnavailable)
return
}
tmpl, err := template.New("Mine").Parse(form)
if err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
if err := tmpl.Execute(w, item); err != nil {
http.Error(w, err.Error(), http.StatusInternalServerError)
return
}
}
func main() {
http.HandleFunc("/", handler)
log.Fatal(http.ListenAndServe(":9090", nil))
}