DEV Community

Cover image for Simple web app to serve with go
Arjun Shetty
Arjun Shetty

Posted on • Edited on

3 2

Simple web app to serve with go

Lets us create a simple web application which will serve static files a html template using golang

Here is how the structure of my project looks like. Ignore the npm and config files.

Alt Text

Here is the full code snippets from main and handler

main.go

func main() {
  // parses all the html template files placed in this folder
    t := template.Must(template.ParseGlob("template/*"))

  // hosts the specified directory
    fs := http.FileServer(http.Dir("./ui/"))

  //maps the hosted file server to the route "/static/"
    http.Handle("/static/", fs)

  // moved the http handlers to a different package to keep the main clean.
  // also provided a way to pass arguments from main to handlers
    http.HandleFunc("/", handlers.Home(t))

    fmt.Println("Listening on 8000")
    fmt.Println(http.ListenAndServe(":8000", nil))
}

Enter fullscreen mode Exit fullscreen mode

handlers/home.go

//Home .. handles "/" route
func Home(t *template.Template) func(http.ResponseWriter, *http.Request) {
  // create a sample message struct which can be used inside the template html files
    m := Message{"Arjun", "Hello"}

  // returning a handler func
    return func(w http.ResponseWriter, r *http.Request) {
        if name := r.FormValue("name"); name != "" {
            m.Name = name
        }
    // "Execute" method will pass the message to the html template where we will use 
    // the properties of this message 
        if err := t.Execute(w, m); err != nil {
            http.Error(w, "Failed to execute the template", 500)
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Explanations as inline comments.

Inside the html file this is how you access the properties of the model passed.

<title>Hi {{.Name}}</title>
Enter fullscreen mode Exit fullscreen mode

Further Reading for details on the go packages used

Originally Posted on bitsmonkey

Image of Datadog

How to Diagram Your Cloud Architecture

Cloud architecture diagrams provide critical visibility into the resources in your environment and how they’re connected. In our latest eBook, AWS Solution Architects Jason Mimick and James Wenzel walk through best practices on how to build effective and professional diagrams.

Download the Free eBook

Top comments (0)

Postmark Image

Speedy emails, satisfied customers

Are delayed transactional emails costing you user satisfaction? Postmark delivers your emails almost instantly, keeping your customers happy and connected.

Sign up