Exemplo de modelo HTTP de Golang

package main

import (
	"encoding/json"
	"html/template"
	"log"
	"net/http"
	"os"
)

type APIResponse struct {
	Stat_code int
	Stat_msg  string
}

func RenderTemplateGlobal() (*template.Template, error) {
	tmpl, err := template.ParseGlob("views/*")
	return tmpl, err
}

func RenderTemplateFile() *template.Template {
	html, err := template.ParseFiles("views/index.html", "views/header.html")
	tmpl := template.Must(html, err)
	return tmpl
}

func JsonOutput(w http.ResponseWriter, r *http.Request) {
	data := APIResponse{Stat_code: 200, Stat_msg: "Testing"}
	stringify, err := json.Marshal(data)
	if err != nil {
		log.Fatal(err)
	}
	w.Write(stringify)
}

func HtmlOuput(w http.ResponseWriter, r *http.Request) {
	data := APIResponse{Stat_code: 200, Stat_msg: "Hello Wordl"}
	html, err := template.ParseFiles("index.html")
	if err != nil {
		log.Fatal(err)
	}
	html.Execute(w, data)
}

func HtmlWithCss(w http.ResponseWriter, r *http.Request) {
	data := APIResponse{Stat_code: 200, Stat_msg: "Hello Wordl"}
	html, err := template.ParseFiles("index.html")
	if err != nil {
		log.Fatal(err)
	}
	html.Execute(w, data)
}

func MultipleTemplate(w http.ResponseWriter, r *http.Request) {
	html, err := RenderTemplateGlobal()
	if err != nil {
		log.Fatal(err)
	}
	html.ExecuteTemplate(w, "index", nil)
}

func InlineTemplate(w http.ResponseWriter, r *http.Request) {
	html := `
   <html>
     <head>
      <title> InlineTemplate </title>
		 </head>
		 <body>
		   <h1> {{ .Stat_msg }} </h1>
		 </body>
	 </html>
	`

	parse := template.Must(template.New("basic").Parse(html))
	parse.Lookup("basic").Execute(w, APIResponse{Stat_msg: "Inline Template Testing"})
}

func main() {
	// mounting static assets
	http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.FS(os.DirFS("assets")))))

	http.HandleFunc("/", HtmlOuput)
	http.HandleFunc("/json", JsonOutput)
	http.HandleFunc("/css", HtmlWithCss)
	http.HandleFunc("/multiple", MultipleTemplate)
	http.HandleFunc("/inline", InlineTemplate)

	http.ListenAndServe(":3000", nil)
}
Restu Wahyu Saputra