Introduction

Go's templating system allows you to create dynamic web pages by rendering data within HTML templates. In this guide, we'll explore Go templating, including the use of the `html/template` package, and provide sample code to demonstrate how to create dynamic web pages with Go.


The `html/template` Package

The `html/template` package is part of Go's standard library and provides a simple and secure way to generate HTML and other text-based formats. It supports the injection of dynamic data into templates using placeholders.


Basic Templating

Let's start with a simple example of using the `html/template` package to create a dynamic web page. In this example, we have a template that includes placeholders for dynamic content:

                            package main
import (
`html/template`
`os`
)
func main() {
tmpl, _ := template.New(`example`).Parse(`Hello, {{.}}!`)
tmpl.Execute(os.Stdout, `World`)
}

In this code, we create a template with a placeholder `{{.}}` and use `Execute` to render the template with the value `World.` The result is `Hello, World!`.


Passing Data to Templates

You can pass data to templates by defining a struct or a map and then using the data in the template. Here's an example of passing a struct to a template:

                            package main
import (
`html/template`
`os`
)
type Person struct {
Name string
}
func main() {
person := Person{Name: `Alice`}
tmpl, _ := template.New(`example`).Parse(`Hello, {{.Name}}!`)
tmpl.Execute(os.Stdout, person)
}

In this code, we create a `Person` struct, pass it to the template, and access the `Name` field within the template.


Looping and Conditional Logic

Go templates support looping and conditional logic. Here's an example of looping through a list of names and rendering them in an HTML list:

                            package main
import (
`html/template`
`os`
)
type Person struct {
Name string
}
func main() {
people := []Person{
{Name: `Alice`},
{Name: `Bob`},
{Name: `Charlie`},
}
tmpl, _ := template.New(`example`).Parse(`
<ul>
{{range .}}
<li>{{.Name}}</li>
{{end}}
</ul>
`)
tmpl.Execute(os.Stdout, people)
}

In this code, we define a slice of `Person` structs, use the `range` directive in the template to loop through the list, and render each name as an HTML list item.


Further Resources

To continue learning about Go templating, consider these resources: