package main import ( "encoding/json" "html/template" "log" "net/http" "os" "github.com/gin-gonic/gin" ) const VERSION string = "1.0.0" type Product struct { ID string Title string Description string Price float64 } func main() { // Products template html := `
ID: {{.ID}}
Description: {{.Description}}
Price: {{.Price}}
{{end}} ` tmpl, err := template.New("product-listing").Parse(html) if err != nil { log.Fatalf("Error parsing product listing template: %s", err) } router := gin.Default() router.SetHTMLTemplate(tmpl) // Router handlers router.GET("/", func(c *gin.Context) { product := os.Getenv("PRODUCT_SERVICE_URL") resp, err := http.Get("http://" + product) if err != nil { c.IndentedJSON(500, gin.H{ "status": "error", "message": "Could not connect to product service", "detailed": err.Error(), }) return } defer resp.Body.Close() var products []Product json.NewDecoder(resp.Body).Decode(&products) c.HTML(200, "product-listing", products) }) // Lets go... router.Run(":8000") }