Page template:<\/h4> {{define \"title\"}}Home{{end}}\n{{define \"content\"}}\n Welcome to the home page!<\/p>\n{{end}}<\/pre>
Go code:<\/h4> tpl := template.Must(template.New(\"base\").ParseFiles(\"layout.html\", \"home.html\"))\ntpl.ExecuteTemplate(os.Stdout, \"base\", nil)<\/pre> This pattern lets you build modular, reusable layouts.<\/p>
8. Best Practices<\/h3>- ? Always use
html\/template<\/code> for HTML output.<\/li>- ? Pre-parse templates in production (don't parse on every request).<\/li>
- ? Use
template.Must()<\/code> during initialization to catch errors early.<\/li>- ? Keep logic minimum in templates—do heavy lifting in Go code.<\/li>
- ? Organize templates into files and use
ParseFiles<\/code> or ParseGlob<\/code> .<\/li><\/ul> \/\/ Load all templates from a folder\ntpl := template.Must(template.ParseGlob(\"templates\/*.html\"))<\/pre>
\n Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.<\/p>\n
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.<\/p>"}
亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱
Table of Contents
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4. HTML/template automatically escapes HTML special characters. If you need to render the original HTML, you should use the template.HTML type but only trusted input. 5. Use block and define to simulate template inheritance to achieve layout reuse. 6. Best practices include: pre-parsing templates, catching errors with template.Must, avoiding writing complex logic in templates, and loading multiple template files through ParseGlob. After correctly mastering point symbols, actions and escape rules, the Go template system will become a powerful tool for building safe and reliable applications.

Go's built-in templating engine, found in the text/template
and html/template
packages, is a powerful and efficient way to generate dynamic content—whether that's plain text, configuration files, or HTML web pages. It's especially popular in web development with Go, where safety and simplicity are key. Here's a practical guide to help you get the most out of Go's templating system.

1. Understanding text/template
vs html/template
Go provides two main templating packages:
-
text/template
: General-purpose template for any kind of text (eg, config files, emails, CLI output).
-
html/template
: Built on top of text/template
, but designed specifically for HTML with automatic context-aware escaping to prevent XSS attacks.
? Use html/template
when generating HTML. It's safer by default.

import (
"text/template" // for plain text
"html/template" // for HTML
)
2. Basic Template Syntax
Templates use double braces {{ }}
to enclose actions. Common constructs include:
-
{{.}}
– refers to the current data (the “dot”) -
{{.FieldName}}
– accesses a field in a struct -
{{if .Condition}}...{{end}}
– conditional logic -
{{range .Items}}...{{end}}
– loops over slices, maps, or channels -
{{template "name"}}
– include a named template
Example: Simple greeting
tmpl := `Hello, {{.Name}}!`
data := struct{ Name string }{Name: "Alice"}
t := template.New("greeting")
t, _ = t.Parse(tmpl)
t.Execute(os.Stdout, data)
// Output: Hello, Alice!
3. Structs, Slices, and Maps in Templates
Go templates work seamlessly with Go data structures.

Using a struct with a slice:
type Person struct {
Name string
Hobbies []string
}
data := Person{
Name: "Bob",
Hobbies: []string{"Golang", "Hiking", "Reading"},
}
tmpl := `
Name: {{.Name}}
Hobbies:
{{range .Hobbies}}- {{.}}
{{end}}
`
template.Must(template.New("person").Parse(tmpl)).Execute(os.Stdout, data)
Output:
Name: Bob
Hobbies:
- Golang
- Hiking
- Reading
Note: In range
, the dot ( .
) changes to the current item in the iteration.
4. Control Structures: if
, else
, range
Go templates support basic logic.
- Use
{{if .Value}}...{{else}}...{{end}}
- Empty slices, nil points, zero values evaluate to false
{{if .LoggedIn}}
Welcome back, {{.Username}}!
{{else}}
Please log in.
{{end}}
You can also compare values using built-in functions (from eq
, ne
, lt
, gt
, etc.):
{{if eq .Status "active"}}
<p>Status: Active</p>
{{end}}
These comparison functions come from the template's built-in functions, not Go code.
5. Creating Reusable Templates with define
and template
You can define named templates and include them.
const tmpl = `
{{define "Greet"}}Hello, {{.}}!{{end}}
{{template "Greet" "Alice"}}
{{template "Greet" "Bob"}}
`
t, _ := template.New("main").Parse(tmpl)
t.Execute(os.Stdout, nil)
This is useful for headers, footers, or reusable UI components in web apps.
6. Using html/template
Safely
When generating HTML, always use html/template
to avoid XSS.
import "html/template"
data := struct {
Content string
}{Content: "<script>alert('hack')</script>"}
tmpl := `<p>{{.Content}}</p>`
t, _ := template.New("safe").Parse(tmpl)
t.Execute(os.Stdout, data)
? Output:
<p><script>alert('hack')</script></p>
The content is automatically escaped. If you really need raw HTML, use template.HTML
type:
type Page struct {
Content template.HTML
}
data := Page{Content: template.HTML("<strong>Safe HTML</strong>")}
Now {{.Content}}
will render without escaping.
?? Only do this with trusted input.
7. Template Inheritance with Blocks (via define
and block
)
While Go doesn't have direct inheritance, you can simulate layout templates using define
and template
.
Base layout ( layout.html
):
<!DOCTYPE html>
<html>
<head><title>{{block "title" .}}Default Title{{end}}</title></head>
<body>
<header><h1>My Site</h1></header>
<main>{{block "content" .}}Default content{{end}}</main>
</body>
</html>
Page template:
{{define "title"}}Home{{end}}
{{define "content"}}
<p>Welcome to the home page!</p>
{{end}}
Go code:
tpl := template.Must(template.New("base").ParseFiles("layout.html", "home.html"))
tpl.ExecuteTemplate(os.Stdout, "base", nil)
This pattern lets you build modular, reusable layouts.
8. Best Practices
- ? Always use
html/template
for HTML output. - ? Pre-parse templates in production (don't parse on every request).
- ? Use
template.Must()
during initialization to catch errors early. - ? Keep logic minimum in templates—do heavy lifting in Go code.
- ? Organize templates into files and use
ParseFiles
or ParseGlob
.
// Load all templates from a folder
tpl := template.Must(template.ParseGlob("templates/*.html"))
Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.
The above is the detailed content of A Guide to Go's Templating Engine. For more information, please follow other related articles on the PHP Chinese website!
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Agnes Tachyon Build Guide | A Pretty Derby Musume
1 months ago
By Jack chen
Grass Wonder Build Guide | Uma Musume Pretty Derby
3 weeks ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
3 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
3 weeks ago
By Jack chen
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Hot Topics
A Guide to Go's Templating Engine
Jul 26, 2025 am 08:25 AM
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in the range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4.ht
Integrating Go with Kafka for Streaming Data
Jul 26, 2025 am 08:17 AM
Go and Kafka integration is an effective solution to build high-performance real-time data systems. The appropriate client library should be selected according to needs: 1. Priority is given to kafka-go to obtain simple Go-style APIs and good context support, suitable for rapid development; 2. Select Sarama when fine control or advanced functions are required; 3. When implementing producers, you need to configure the correct Broker address, theme and load balancing strategy, and manage timeouts and closings through context; 4. Consumers should use consumer groups to achieve scalability and fault tolerance, automatically submit offsets and use concurrent processing reasonably; 5. Use JSON, Avro or Protobuf for serialization, and it is recommended to combine SchemaRegistr
How to pass a slice to a function in Go?
Jul 26, 2025 am 07:29 AM
When passing slices in Go, it is usually passed directly by value, because the slice header contains a pointer to the underlying array, and copying the slice header will not copy the underlying data, so the modification of elements in the function will affect the original slice; 1. If you need to reassign or adjust the slice length within the function and make the change take effect, you should pass the slice pointer; 2. Otherwise, you can pass the slice directly without using a pointer; 3. If reallocation may be triggered when using append, you must pass through the pointer to make the updated slice visible to the outside. Therefore, unless the entire slice is to be replaced, the slice should be passed in the form of a value.
what does go vet do
Jul 26, 2025 am 08:52 AM
govetcatchescommonlogicalerrorsandsuspiciousconstructsinGocodesuchas1)misuseofprintf-stylefunctionswithincorrectarguments,2)unkeyedstructliteralsthatmayleadtoincorrectfieldassignments,3)sendingtoclosedchannelswhichcausespanics,4)ineffectiveassignment
how to handle signals go by example
Jul 25, 2025 am 04:36 AM
Use signal.Notify() in the os/signal package to register the specified signal (such as SIGINT, SIGTERM) into the buffer channel, so that the program can be captured instead of terminated by default; 2.
How to embed a file into a string in Go?
Jul 26, 2025 am 05:40 AM
To embed the file contents into the string of the Go program, you should use go:embed (Go1.16) to embed the file at compile time; 1. Add the //go:embed directive above the target variable; 2. Ensure the file path is correct and the file exists; 3. Use string type variables to receive text content; 4. Build the project through gobuild to include the file content. This method is safe and efficient and does not require additional tools, and ultimately implements the file contents directly into the binary file as strings.
How to use reflection in Go?
Jul 28, 2025 am 12:26 AM
Usereflect.ValueOfandreflect.TypeOftogetruntimevaluesandtypes;2.Inspecttypedetailswithreflect.TypemethodslikeName()andKind();3.Modifyvaluesviareflect.Value.Elem()andCanSet()afterpassingapointer;4.CallmethodsdynamicallyusingMethodByName()andCall();5.R
go by example http middleware
Jul 26, 2025 am 09:36 AM
In Go language, HTTP middleware is implemented through functions, and its core answer is: the middleware is a function that receives and returns http.Handler, used to execute general logic before and after request processing. 1. The middleware function signature is like func (Middleware(nexthttp.Handler)http.Handler), which achieves functional expansion by wrapping the original processor; 2. The log middleware in the example records the request method, path, client address and processing time-consuming, which is convenient for monitoring and debugging; 3. The authentication middleware checks the Authorization header, and returns 401 or 403 errors when verification fails to ensure secure access; 4. Multiple middleware can be nested to adjust
See all articles
Welcome to the home page!<\/p>\n{{end}}<\/pre>
Go code:<\/h4> tpl := template.Must(template.New(\"base\").ParseFiles(\"layout.html\", \"home.html\"))\ntpl.ExecuteTemplate(os.Stdout, \"base\", nil)<\/pre> This pattern lets you build modular, reusable layouts.<\/p>
8. Best Practices<\/h3>- ? Always use
html\/template<\/code> for HTML output.<\/li>- ? Pre-parse templates in production (don't parse on every request).<\/li>
- ? Use
template.Must()<\/code> during initialization to catch errors early.<\/li>- ? Keep logic minimum in templates—do heavy lifting in Go code.<\/li>
- ? Organize templates into files and use
ParseFiles<\/code> or ParseGlob<\/code> .<\/li><\/ul> \/\/ Load all templates from a folder\ntpl := template.Must(template.ParseGlob(\"templates\/*.html\"))<\/pre>
\n Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.<\/p>\n
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.<\/p>"}
亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱
Table of Contents
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4. HTML/template automatically escapes HTML special characters. If you need to render the original HTML, you should use the template.HTML type but only trusted input. 5. Use block and define to simulate template inheritance to achieve layout reuse. 6. Best practices include: pre-parsing templates, catching errors with template.Must, avoiding writing complex logic in templates, and loading multiple template files through ParseGlob. After correctly mastering point symbols, actions and escape rules, the Go template system will become a powerful tool for building safe and reliable applications.

Go's built-in templating engine, found in the text/template
and html/template
packages, is a powerful and efficient way to generate dynamic content—whether that's plain text, configuration files, or HTML web pages. It's especially popular in web development with Go, where safety and simplicity are key. Here's a practical guide to help you get the most out of Go's templating system.

1. Understanding text/template
vs html/template
Go provides two main templating packages:
-
text/template
: General-purpose template for any kind of text (eg, config files, emails, CLI output).
-
html/template
: Built on top of text/template
, but designed specifically for HTML with automatic context-aware escaping to prevent XSS attacks.
? Use html/template
when generating HTML. It's safer by default.

import (
"text/template" // for plain text
"html/template" // for HTML
)
2. Basic Template Syntax
Templates use double braces {{ }}
to enclose actions. Common constructs include:
-
{{.}}
– refers to the current data (the “dot”) -
{{.FieldName}}
– accesses a field in a struct -
{{if .Condition}}...{{end}}
– conditional logic -
{{range .Items}}...{{end}}
– loops over slices, maps, or channels -
{{template "name"}}
– include a named template
Example: Simple greeting
tmpl := `Hello, {{.Name}}!`
data := struct{ Name string }{Name: "Alice"}
t := template.New("greeting")
t, _ = t.Parse(tmpl)
t.Execute(os.Stdout, data)
// Output: Hello, Alice!
3. Structs, Slices, and Maps in Templates
Go templates work seamlessly with Go data structures.

Using a struct with a slice:
type Person struct {
Name string
Hobbies []string
}
data := Person{
Name: "Bob",
Hobbies: []string{"Golang", "Hiking", "Reading"},
}
tmpl := `
Name: {{.Name}}
Hobbies:
{{range .Hobbies}}- {{.}}
{{end}}
`
template.Must(template.New("person").Parse(tmpl)).Execute(os.Stdout, data)
Output:
Name: Bob
Hobbies:
- Golang
- Hiking
- Reading
Note: In range
, the dot ( .
) changes to the current item in the iteration.
4. Control Structures: if
, else
, range
Go templates support basic logic.
- Use
{{if .Value}}...{{else}}...{{end}}
- Empty slices, nil points, zero values evaluate to false
{{if .LoggedIn}}
Welcome back, {{.Username}}!
{{else}}
Please log in.
{{end}}
You can also compare values using built-in functions (from eq
, ne
, lt
, gt
, etc.):
{{if eq .Status "active"}}
<p>Status: Active</p>
{{end}}
These comparison functions come from the template's built-in functions, not Go code.
5. Creating Reusable Templates with define
and template
You can define named templates and include them.
const tmpl = `
{{define "Greet"}}Hello, {{.}}!{{end}}
{{template "Greet" "Alice"}}
{{template "Greet" "Bob"}}
`
t, _ := template.New("main").Parse(tmpl)
t.Execute(os.Stdout, nil)
This is useful for headers, footers, or reusable UI components in web apps.
6. Using html/template
Safely
When generating HTML, always use html/template
to avoid XSS.
import "html/template"
data := struct {
Content string
}{Content: "<script>alert('hack')</script>"}
tmpl := `<p>{{.Content}}</p>`
t, _ := template.New("safe").Parse(tmpl)
t.Execute(os.Stdout, data)
? Output:
<p><script>alert('hack')</script></p>
The content is automatically escaped. If you really need raw HTML, use template.HTML
type:
type Page struct {
Content template.HTML
}
data := Page{Content: template.HTML("<strong>Safe HTML</strong>")}
Now {{.Content}}
will render without escaping.
?? Only do this with trusted input.
7. Template Inheritance with Blocks (via define
and block
)
While Go doesn't have direct inheritance, you can simulate layout templates using define
and template
.
Base layout ( layout.html
):
<!DOCTYPE html>
<html>
<head><title>{{block "title" .}}Default Title{{end}}</title></head>
<body>
<header><h1>My Site</h1></header>
<main>{{block "content" .}}Default content{{end}}</main>
</body>
</html>
Page template:
{{define "title"}}Home{{end}}
{{define "content"}}
<p>Welcome to the home page!</p>
{{end}}
Go code:
tpl := template.Must(template.New("base").ParseFiles("layout.html", "home.html"))
tpl.ExecuteTemplate(os.Stdout, "base", nil)
This pattern lets you build modular, reusable layouts.
8. Best Practices
- ? Always use
html/template
for HTML output. - ? Pre-parse templates in production (don't parse on every request).
- ? Use
template.Must()
during initialization to catch errors early. - ? Keep logic minimum in templates—do heavy lifting in Go code.
- ? Organize templates into files and use
ParseFiles
or ParseGlob
.
// Load all templates from a folder
tpl := template.Must(template.ParseGlob("templates/*.html"))
Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.
The above is the detailed content of A Guide to Go's Templating Engine. For more information, please follow other related articles on the PHP Chinese website!
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Agnes Tachyon Build Guide | A Pretty Derby Musume
1 months ago
By Jack chen
Grass Wonder Build Guide | Uma Musume Pretty Derby
3 weeks ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
3 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
3 weeks ago
By Jack chen
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Hot Topics
A Guide to Go's Templating Engine
Jul 26, 2025 am 08:25 AM
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in the range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4.ht
Integrating Go with Kafka for Streaming Data
Jul 26, 2025 am 08:17 AM
Go and Kafka integration is an effective solution to build high-performance real-time data systems. The appropriate client library should be selected according to needs: 1. Priority is given to kafka-go to obtain simple Go-style APIs and good context support, suitable for rapid development; 2. Select Sarama when fine control or advanced functions are required; 3. When implementing producers, you need to configure the correct Broker address, theme and load balancing strategy, and manage timeouts and closings through context; 4. Consumers should use consumer groups to achieve scalability and fault tolerance, automatically submit offsets and use concurrent processing reasonably; 5. Use JSON, Avro or Protobuf for serialization, and it is recommended to combine SchemaRegistr
How to pass a slice to a function in Go?
Jul 26, 2025 am 07:29 AM
When passing slices in Go, it is usually passed directly by value, because the slice header contains a pointer to the underlying array, and copying the slice header will not copy the underlying data, so the modification of elements in the function will affect the original slice; 1. If you need to reassign or adjust the slice length within the function and make the change take effect, you should pass the slice pointer; 2. Otherwise, you can pass the slice directly without using a pointer; 3. If reallocation may be triggered when using append, you must pass through the pointer to make the updated slice visible to the outside. Therefore, unless the entire slice is to be replaced, the slice should be passed in the form of a value.
what does go vet do
Jul 26, 2025 am 08:52 AM
govetcatchescommonlogicalerrorsandsuspiciousconstructsinGocodesuchas1)misuseofprintf-stylefunctionswithincorrectarguments,2)unkeyedstructliteralsthatmayleadtoincorrectfieldassignments,3)sendingtoclosedchannelswhichcausespanics,4)ineffectiveassignment
how to handle signals go by example
Jul 25, 2025 am 04:36 AM
Use signal.Notify() in the os/signal package to register the specified signal (such as SIGINT, SIGTERM) into the buffer channel, so that the program can be captured instead of terminated by default; 2.
How to embed a file into a string in Go?
Jul 26, 2025 am 05:40 AM
To embed the file contents into the string of the Go program, you should use go:embed (Go1.16) to embed the file at compile time; 1. Add the //go:embed directive above the target variable; 2. Ensure the file path is correct and the file exists; 3. Use string type variables to receive text content; 4. Build the project through gobuild to include the file content. This method is safe and efficient and does not require additional tools, and ultimately implements the file contents directly into the binary file as strings.
How to use reflection in Go?
Jul 28, 2025 am 12:26 AM
Usereflect.ValueOfandreflect.TypeOftogetruntimevaluesandtypes;2.Inspecttypedetailswithreflect.TypemethodslikeName()andKind();3.Modifyvaluesviareflect.Value.Elem()andCanSet()afterpassingapointer;4.CallmethodsdynamicallyusingMethodByName()andCall();5.R
go by example http middleware
Jul 26, 2025 am 09:36 AM
In Go language, HTTP middleware is implemented through functions, and its core answer is: the middleware is a function that receives and returns http.Handler, used to execute general logic before and after request processing. 1. The middleware function signature is like func (Middleware(nexthttp.Handler)http.Handler), which achieves functional expansion by wrapping the original processor; 2. The log middleware in the example records the request method, path, client address and processing time-consuming, which is convenient for monitoring and debugging; 3. The authentication middleware checks the Authorization header, and returns 401 or 403 errors when verification fails to ensure secure access; 4. Multiple middleware can be nested to adjust
See all articles
This pattern lets you build modular, reusable layouts.<\/p>
8. Best Practices<\/h3>- ? Always use
html\/template<\/code> for HTML output.<\/li>- ? Pre-parse templates in production (don't parse on every request).<\/li>
- ? Use
template.Must()<\/code> during initialization to catch errors early.<\/li>- ? Keep logic minimum in templates—do heavy lifting in Go code.<\/li>
- ? Organize templates into files and use
ParseFiles<\/code> or ParseGlob<\/code> .<\/li><\/ul> \/\/ Load all templates from a folder\ntpl := template.Must(template.ParseGlob(\"templates\/*.html\"))<\/pre>
\n Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.<\/p>\n
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.<\/p>"}
亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱
Table of Contents
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4. HTML/template automatically escapes HTML special characters. If you need to render the original HTML, you should use the template.HTML type but only trusted input. 5. Use block and define to simulate template inheritance to achieve layout reuse. 6. Best practices include: pre-parsing templates, catching errors with template.Must, avoiding writing complex logic in templates, and loading multiple template files through ParseGlob. After correctly mastering point symbols, actions and escape rules, the Go template system will become a powerful tool for building safe and reliable applications.

Go's built-in templating engine, found in the text/template
and html/template
packages, is a powerful and efficient way to generate dynamic content—whether that's plain text, configuration files, or HTML web pages. It's especially popular in web development with Go, where safety and simplicity are key. Here's a practical guide to help you get the most out of Go's templating system.

1. Understanding text/template
vs html/template
Go provides two main templating packages:
-
text/template
: General-purpose template for any kind of text (eg, config files, emails, CLI output).
-
html/template
: Built on top of text/template
, but designed specifically for HTML with automatic context-aware escaping to prevent XSS attacks.
? Use html/template
when generating HTML. It's safer by default.

import (
"text/template" // for plain text
"html/template" // for HTML
)
2. Basic Template Syntax
Templates use double braces {{ }}
to enclose actions. Common constructs include:
-
{{.}}
– refers to the current data (the “dot”) -
{{.FieldName}}
– accesses a field in a struct -
{{if .Condition}}...{{end}}
– conditional logic -
{{range .Items}}...{{end}}
– loops over slices, maps, or channels -
{{template "name"}}
– include a named template
Example: Simple greeting
tmpl := `Hello, {{.Name}}!`
data := struct{ Name string }{Name: "Alice"}
t := template.New("greeting")
t, _ = t.Parse(tmpl)
t.Execute(os.Stdout, data)
// Output: Hello, Alice!
3. Structs, Slices, and Maps in Templates
Go templates work seamlessly with Go data structures.

Using a struct with a slice:
type Person struct {
Name string
Hobbies []string
}
data := Person{
Name: "Bob",
Hobbies: []string{"Golang", "Hiking", "Reading"},
}
tmpl := `
Name: {{.Name}}
Hobbies:
{{range .Hobbies}}- {{.}}
{{end}}
`
template.Must(template.New("person").Parse(tmpl)).Execute(os.Stdout, data)
Output:
Name: Bob
Hobbies:
- Golang
- Hiking
- Reading
Note: In range
, the dot ( .
) changes to the current item in the iteration.
4. Control Structures: if
, else
, range
Go templates support basic logic.
- Use
{{if .Value}}...{{else}}...{{end}}
- Empty slices, nil points, zero values evaluate to false
{{if .LoggedIn}}
Welcome back, {{.Username}}!
{{else}}
Please log in.
{{end}}
You can also compare values using built-in functions (from eq
, ne
, lt
, gt
, etc.):
{{if eq .Status "active"}}
<p>Status: Active</p>
{{end}}
These comparison functions come from the template's built-in functions, not Go code.
5. Creating Reusable Templates with define
and template
You can define named templates and include them.
const tmpl = `
{{define "Greet"}}Hello, {{.}}!{{end}}
{{template "Greet" "Alice"}}
{{template "Greet" "Bob"}}
`
t, _ := template.New("main").Parse(tmpl)
t.Execute(os.Stdout, nil)
This is useful for headers, footers, or reusable UI components in web apps.
6. Using html/template
Safely
When generating HTML, always use html/template
to avoid XSS.
import "html/template"
data := struct {
Content string
}{Content: "<script>alert('hack')</script>"}
tmpl := `<p>{{.Content}}</p>`
t, _ := template.New("safe").Parse(tmpl)
t.Execute(os.Stdout, data)
? Output:
<p><script>alert('hack')</script></p>
The content is automatically escaped. If you really need raw HTML, use template.HTML
type:
type Page struct {
Content template.HTML
}
data := Page{Content: template.HTML("<strong>Safe HTML</strong>")}
Now {{.Content}}
will render without escaping.
?? Only do this with trusted input.
7. Template Inheritance with Blocks (via define
and block
)
While Go doesn't have direct inheritance, you can simulate layout templates using define
and template
.
Base layout ( layout.html
):
<!DOCTYPE html>
<html>
<head><title>{{block "title" .}}Default Title{{end}}</title></head>
<body>
<header><h1>My Site</h1></header>
<main>{{block "content" .}}Default content{{end}}</main>
</body>
</html>
Page template:
{{define "title"}}Home{{end}}
{{define "content"}}
<p>Welcome to the home page!</p>
{{end}}
Go code:
tpl := template.Must(template.New("base").ParseFiles("layout.html", "home.html"))
tpl.ExecuteTemplate(os.Stdout, "base", nil)
This pattern lets you build modular, reusable layouts.
8. Best Practices
- ? Always use
html/template
for HTML output. - ? Pre-parse templates in production (don't parse on every request).
- ? Use
template.Must()
during initialization to catch errors early. - ? Keep logic minimum in templates—do heavy lifting in Go code.
- ? Organize templates into files and use
ParseFiles
or ParseGlob
.
// Load all templates from a folder
tpl := template.Must(template.ParseGlob("templates/*.html"))
Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.
The above is the detailed content of A Guide to Go's Templating Engine. For more information, please follow other related articles on the PHP Chinese website!
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Agnes Tachyon Build Guide | A Pretty Derby Musume
1 months ago
By Jack chen
Grass Wonder Build Guide | Uma Musume Pretty Derby
3 weeks ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
3 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
3 weeks ago
By Jack chen
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Hot Topics
A Guide to Go's Templating Engine
Jul 26, 2025 am 08:25 AM
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in the range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4.ht
Integrating Go with Kafka for Streaming Data
Jul 26, 2025 am 08:17 AM
Go and Kafka integration is an effective solution to build high-performance real-time data systems. The appropriate client library should be selected according to needs: 1. Priority is given to kafka-go to obtain simple Go-style APIs and good context support, suitable for rapid development; 2. Select Sarama when fine control or advanced functions are required; 3. When implementing producers, you need to configure the correct Broker address, theme and load balancing strategy, and manage timeouts and closings through context; 4. Consumers should use consumer groups to achieve scalability and fault tolerance, automatically submit offsets and use concurrent processing reasonably; 5. Use JSON, Avro or Protobuf for serialization, and it is recommended to combine SchemaRegistr
How to pass a slice to a function in Go?
Jul 26, 2025 am 07:29 AM
When passing slices in Go, it is usually passed directly by value, because the slice header contains a pointer to the underlying array, and copying the slice header will not copy the underlying data, so the modification of elements in the function will affect the original slice; 1. If you need to reassign or adjust the slice length within the function and make the change take effect, you should pass the slice pointer; 2. Otherwise, you can pass the slice directly without using a pointer; 3. If reallocation may be triggered when using append, you must pass through the pointer to make the updated slice visible to the outside. Therefore, unless the entire slice is to be replaced, the slice should be passed in the form of a value.
what does go vet do
Jul 26, 2025 am 08:52 AM
govetcatchescommonlogicalerrorsandsuspiciousconstructsinGocodesuchas1)misuseofprintf-stylefunctionswithincorrectarguments,2)unkeyedstructliteralsthatmayleadtoincorrectfieldassignments,3)sendingtoclosedchannelswhichcausespanics,4)ineffectiveassignment
how to handle signals go by example
Jul 25, 2025 am 04:36 AM
Use signal.Notify() in the os/signal package to register the specified signal (such as SIGINT, SIGTERM) into the buffer channel, so that the program can be captured instead of terminated by default; 2.
How to embed a file into a string in Go?
Jul 26, 2025 am 05:40 AM
To embed the file contents into the string of the Go program, you should use go:embed (Go1.16) to embed the file at compile time; 1. Add the //go:embed directive above the target variable; 2. Ensure the file path is correct and the file exists; 3. Use string type variables to receive text content; 4. Build the project through gobuild to include the file content. This method is safe and efficient and does not require additional tools, and ultimately implements the file contents directly into the binary file as strings.
How to use reflection in Go?
Jul 28, 2025 am 12:26 AM
Usereflect.ValueOfandreflect.TypeOftogetruntimevaluesandtypes;2.Inspecttypedetailswithreflect.TypemethodslikeName()andKind();3.Modifyvaluesviareflect.Value.Elem()andCanSet()afterpassingapointer;4.CallmethodsdynamicallyusingMethodByName()andCall();5.R
go by example http middleware
Jul 26, 2025 am 09:36 AM
In Go language, HTTP middleware is implemented through functions, and its core answer is: the middleware is a function that receives and returns http.Handler, used to execute general logic before and after request processing. 1. The middleware function signature is like func (Middleware(nexthttp.Handler)http.Handler), which achieves functional expansion by wrapping the original processor; 2. The log middleware in the example records the request method, path, client address and processing time-consuming, which is convenient for monitoring and debugging; 3. The authentication middleware checks the Authorization header, and returns 401 or 403 errors when verification fails to ensure secure access; 4. Multiple middleware can be nested to adjust
See all articles
html\/template<\/code> for HTML output.<\/li>- ? Pre-parse templates in production (don't parse on every request).<\/li>
- ? Use
template.Must()<\/code> during initialization to catch errors early.<\/li>- ? Keep logic minimum in templates—do heavy lifting in Go code.<\/li>
- ? Organize templates into files and use
ParseFiles<\/code> or ParseGlob<\/code> .<\/li><\/ul> \/\/ Load all templates from a folder\ntpl := template.Must(template.ParseGlob(\"templates\/*.html\"))<\/pre>
\n Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.<\/p>\n
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.<\/p>"}
亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱
Table of Contents
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4. HTML/template automatically escapes HTML special characters. If you need to render the original HTML, you should use the template.HTML type but only trusted input. 5. Use block and define to simulate template inheritance to achieve layout reuse. 6. Best practices include: pre-parsing templates, catching errors with template.Must, avoiding writing complex logic in templates, and loading multiple template files through ParseGlob. After correctly mastering point symbols, actions and escape rules, the Go template system will become a powerful tool for building safe and reliable applications.

Go's built-in templating engine, found in the text/template
and html/template
packages, is a powerful and efficient way to generate dynamic content—whether that's plain text, configuration files, or HTML web pages. It's especially popular in web development with Go, where safety and simplicity are key. Here's a practical guide to help you get the most out of Go's templating system.

1. Understanding text/template
vs html/template
Go provides two main templating packages:
-
text/template
: General-purpose template for any kind of text (eg, config files, emails, CLI output).
-
html/template
: Built on top of text/template
, but designed specifically for HTML with automatic context-aware escaping to prevent XSS attacks.
? Use html/template
when generating HTML. It's safer by default.

import (
"text/template" // for plain text
"html/template" // for HTML
)
2. Basic Template Syntax
Templates use double braces {{ }}
to enclose actions. Common constructs include:
-
{{.}}
– refers to the current data (the “dot”) -
{{.FieldName}}
– accesses a field in a struct -
{{if .Condition}}...{{end}}
– conditional logic -
{{range .Items}}...{{end}}
– loops over slices, maps, or channels -
{{template "name"}}
– include a named template
Example: Simple greeting
tmpl := `Hello, {{.Name}}!`
data := struct{ Name string }{Name: "Alice"}
t := template.New("greeting")
t, _ = t.Parse(tmpl)
t.Execute(os.Stdout, data)
// Output: Hello, Alice!
3. Structs, Slices, and Maps in Templates
Go templates work seamlessly with Go data structures.

Using a struct with a slice:
type Person struct {
Name string
Hobbies []string
}
data := Person{
Name: "Bob",
Hobbies: []string{"Golang", "Hiking", "Reading"},
}
tmpl := `
Name: {{.Name}}
Hobbies:
{{range .Hobbies}}- {{.}}
{{end}}
`
template.Must(template.New("person").Parse(tmpl)).Execute(os.Stdout, data)
Output:
Name: Bob
Hobbies:
- Golang
- Hiking
- Reading
Note: In range
, the dot ( .
) changes to the current item in the iteration.
4. Control Structures: if
, else
, range
Go templates support basic logic.
- Use
{{if .Value}}...{{else}}...{{end}}
- Empty slices, nil points, zero values evaluate to false
{{if .LoggedIn}}
Welcome back, {{.Username}}!
{{else}}
Please log in.
{{end}}
You can also compare values using built-in functions (from eq
, ne
, lt
, gt
, etc.):
{{if eq .Status "active"}}
<p>Status: Active</p>
{{end}}
These comparison functions come from the template's built-in functions, not Go code.
5. Creating Reusable Templates with define
and template
You can define named templates and include them.
const tmpl = `
{{define "Greet"}}Hello, {{.}}!{{end}}
{{template "Greet" "Alice"}}
{{template "Greet" "Bob"}}
`
t, _ := template.New("main").Parse(tmpl)
t.Execute(os.Stdout, nil)
This is useful for headers, footers, or reusable UI components in web apps.
6. Using html/template
Safely
When generating HTML, always use html/template
to avoid XSS.
import "html/template"
data := struct {
Content string
}{Content: "<script>alert('hack')</script>"}
tmpl := `<p>{{.Content}}</p>`
t, _ := template.New("safe").Parse(tmpl)
t.Execute(os.Stdout, data)
? Output:
<p><script>alert('hack')</script></p>
The content is automatically escaped. If you really need raw HTML, use template.HTML
type:
type Page struct {
Content template.HTML
}
data := Page{Content: template.HTML("<strong>Safe HTML</strong>")}
Now {{.Content}}
will render without escaping.
?? Only do this with trusted input.
7. Template Inheritance with Blocks (via define
and block
)
While Go doesn't have direct inheritance, you can simulate layout templates using define
and template
.
Base layout ( layout.html
):
<!DOCTYPE html>
<html>
<head><title>{{block "title" .}}Default Title{{end}}</title></head>
<body>
<header><h1>My Site</h1></header>
<main>{{block "content" .}}Default content{{end}}</main>
</body>
</html>
Page template:
{{define "title"}}Home{{end}}
{{define "content"}}
<p>Welcome to the home page!</p>
{{end}}
Go code:
tpl := template.Must(template.New("base").ParseFiles("layout.html", "home.html"))
tpl.ExecuteTemplate(os.Stdout, "base", nil)
This pattern lets you build modular, reusable layouts.
8. Best Practices
- ? Always use
html/template
for HTML output. - ? Pre-parse templates in production (don't parse on every request).
- ? Use
template.Must()
during initialization to catch errors early. - ? Keep logic minimum in templates—do heavy lifting in Go code.
- ? Organize templates into files and use
ParseFiles
or ParseGlob
.
// Load all templates from a folder
tpl := template.Must(template.ParseGlob("templates/*.html"))
Go's templating engine might feel minimal compared to other languages, but its simplicity, type safety, and security features make it ideal for building reliable applications—especially web servers.
Basically, once you get the hang of the dot, actions, and escaping rules, it becomes a solid tool in your Go toolkit.
The above is the detailed content of A Guide to Go's Templating Engine. For more information, please follow other related articles on the PHP Chinese website!
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Hot AI Tools
Undress AI Tool
Undress images for free
Undresser.AI Undress
AI-powered app for creating realistic nude photos
AI Clothes Remover
Online AI tool for removing clothes from photos.
Clothoff.io
AI clothes remover
Video Face Swap
Swap faces in any video effortlessly with our completely free AI face swap tool!
Hot Article
Agnes Tachyon Build Guide | A Pretty Derby Musume
1 months ago
By Jack chen
Grass Wonder Build Guide | Uma Musume Pretty Derby
3 weeks ago
By Jack chen
Roblox: 99 Nights In The Forest - All Badges And How To Unlock Them
3 weeks ago
By DDD
Uma Musume Pretty Derby Banner Schedule (July 2025)
3 weeks ago
By Jack chen
Hot Tools
Notepad++7.3.1
Easy-to-use and free code editor
SublimeText3 Chinese version
Chinese version, very easy to use
Zend Studio 13.0.1
Powerful PHP integrated development environment
Dreamweaver CS6
Visual web development tools
SublimeText3 Mac version
God-level code editing software (SublimeText3)
Hot Topics
A Guide to Go's Templating Engine
Jul 26, 2025 am 08:25 AM
Go's template engine provides powerful dynamic content generation capabilities through text/template and html/template packages, where html/template has automatic escape function to prevent XSS attacks, so it should be used first when generating HTML. 1. Use {{}} syntax to insert variables, conditional judgments and loops, such as {{.FieldName}} to access structure fields, {{if}} and {{range}} to implement logical control. 2. The template supports Go data structures such as struct, slice and map, and the dot in the range represents the current iterative element. 3. The named template can be defined through define and reused with the template directive. 4.ht
Integrating Go with Kafka for Streaming Data
Jul 26, 2025 am 08:17 AM
Go and Kafka integration is an effective solution to build high-performance real-time data systems. The appropriate client library should be selected according to needs: 1. Priority is given to kafka-go to obtain simple Go-style APIs and good context support, suitable for rapid development; 2. Select Sarama when fine control or advanced functions are required; 3. When implementing producers, you need to configure the correct Broker address, theme and load balancing strategy, and manage timeouts and closings through context; 4. Consumers should use consumer groups to achieve scalability and fault tolerance, automatically submit offsets and use concurrent processing reasonably; 5. Use JSON, Avro or Protobuf for serialization, and it is recommended to combine SchemaRegistr
How to pass a slice to a function in Go?
Jul 26, 2025 am 07:29 AM
When passing slices in Go, it is usually passed directly by value, because the slice header contains a pointer to the underlying array, and copying the slice header will not copy the underlying data, so the modification of elements in the function will affect the original slice; 1. If you need to reassign or adjust the slice length within the function and make the change take effect, you should pass the slice pointer; 2. Otherwise, you can pass the slice directly without using a pointer; 3. If reallocation may be triggered when using append, you must pass through the pointer to make the updated slice visible to the outside. Therefore, unless the entire slice is to be replaced, the slice should be passed in the form of a value.
what does go vet do
Jul 26, 2025 am 08:52 AM
govetcatchescommonlogicalerrorsandsuspiciousconstructsinGocodesuchas1)misuseofprintf-stylefunctionswithincorrectarguments,2)unkeyedstructliteralsthatmayleadtoincorrectfieldassignments,3)sendingtoclosedchannelswhichcausespanics,4)ineffectiveassignment
how to handle signals go by example
Jul 25, 2025 am 04:36 AM
Use signal.Notify() in the os/signal package to register the specified signal (such as SIGINT, SIGTERM) into the buffer channel, so that the program can be captured instead of terminated by default; 2.
How to embed a file into a string in Go?
Jul 26, 2025 am 05:40 AM
To embed the file contents into the string of the Go program, you should use go:embed (Go1.16) to embed the file at compile time; 1. Add the //go:embed directive above the target variable; 2. Ensure the file path is correct and the file exists; 3. Use string type variables to receive text content; 4. Build the project through gobuild to include the file content. This method is safe and efficient and does not require additional tools, and ultimately implements the file contents directly into the binary file as strings.
How to use reflection in Go?
Jul 28, 2025 am 12:26 AM
Usereflect.ValueOfandreflect.TypeOftogetruntimevaluesandtypes;2.Inspecttypedetailswithreflect.TypemethodslikeName()andKind();3.Modifyvaluesviareflect.Value.Elem()andCanSet()afterpassingapointer;4.CallmethodsdynamicallyusingMethodByName()andCall();5.R
go by example http middleware
Jul 26, 2025 am 09:36 AM
In Go language, HTTP middleware is implemented through functions, and its core answer is: the middleware is a function that receives and returns http.Handler, used to execute general logic before and after request processing. 1. The middleware function signature is like func (Middleware(nexthttp.Handler)http.Handler), which achieves functional expansion by wrapping the original processor; 2. The log middleware in the example records the request method, path, client address and processing time-consuming, which is convenient for monitoring and debugging; 3. The authentication middleware checks the Authorization header, and returns 401 or 403 errors when verification fails to ensure secure access; 4. Multiple middleware can be nested to adjust
See all articles