在 Golang 中使用 If-Else 和 Switch Loop Inside HTML 模板
HTML 模板是一个 Golang (Go) 包,它支持数据驱动的模板,用于创建安全的 HTML 输出以防止代码注入。 使用 HTML/模板的一个显着优势是它使用上下文自动转义生成安全、转义的 HTML 输出。
因此,只要输出是 HTML,就应该始终使用 HTML 模板包而不是文本模板。 让我们看几个在 HTML 模板中使用 if-else 和 switch 的例子。
在 Golang 的 HTML 模板中使用 if-else 循环
在此示例中,我们创建了两个结构来保存 ToDo 列表项中的数据:ToDo 和 PageData。 创建并解析定义的 HTML 模板 tmpl。
最后,我们通过将 HTML 提供给 Execute() 函数、数据和解析后的 HTML 模板来呈现我们的 HTML。
代码:
package main
import (
"html/template"
"log"
"os"
)
type Todo struct {
Title string
Done bool
}
type PageData struct {
PageTitle string
Todos []Todo
}
func main() {
const tmpl = `
<h1>{{.PageTitle}}</h1>
<ul>
{{range .Todos}}
{{if .Done}}
<li>{{.Title}} ✔</li>
{{else}}
<li>{{.Title}}</li>
{{end}}
{{end}}
</ul>`
t, err := template.New("webpage").Parse(tmpl)
if err != nil {
log.Fatal(err)
}
data := PageData{
PageTitle: "Personal TODO list",
Todos: []Todo{
{Title: "Task 1", Done: true},
{Title: "Task 2", Done: false},
{Title: "Task 3", Done: false},
},
}
t.Execute(os.Stdout, data)
}
输出:
Personal TODO list
Task 1 ✔
Task 2
Task 3
在 Golang 中使用 switch Loop Inside HTML 模板
代码:
package main
import (
"fmt"
"html/template"
"os"
)
func main() {
const (
paragraph_hypothesis = 1 << iota
paragraph_attachment = 1 << iota
paragraph_menu = 1 << iota
)
const text = "{{.Paratype | printpara}}\n"
type Paragraph struct {
Paratype int
}
var paralist = []*Paragraph{
&Paragraph{paragraph_hypothesis},
&Paragraph{paragraph_attachment},
&Paragraph{paragraph_menu},
}
t := template.New("testparagraphs")
printPara := func(paratype int) string {
text := ""
switch paratype {
case paragraph_hypothesis:
text = "This is a hypothesis testing\n"
case paragraph_attachment:
text = "This is using switch case\n"
case paragraph_menu:
text = "Menu\n1:\n2:\n3:\n\nPick any option:\n"
}
return text
}
template.Must(t.Funcs(template.FuncMap{"printpara": printPara}).Parse(text))
for _, p := range paralist {
err := t.Execute(os.Stdout, p)
if err != nil {
fmt.Println("executing template:", err)
}
}
}
输出:
This is a hypothesis testing
This is using switch case
Menu
1:
2:
3:
Pick any option:
相关文章
Golang 中的零值 Nil
发布时间:2023/04/27 浏览次数:166 分类:Go
-
本篇文章介绍 nil 在 Golang 中的含义,nil 是 Go 编程语言中的零值,是众所周知且重要的预定义标识符。
Golang 中的 Lambda 表达式
发布时间:2023/04/27 浏览次数:93 分类:Go
-
本篇文章介绍如何在 Golang 中创建 lambda 表达式。Lambda 表达式似乎不存在于 Golang 中。 函数文字、lambda 函数或闭包是匿名函数的另一个名称。
在 Go 中捕获 Panics
发布时间:2023/04/27 浏览次数:66 分类:Go
-
像错误一样,Panic 发生在运行时。 换句话说,当您的 Go 程序中出现意外情况导致执行终止时,就会发生 Panics。让我们看一些例子来捕捉 Golang 中的Panics。
在 Go 中使用断言
发布时间:2023/04/27 浏览次数:181 分类:Go
-
本篇文章介绍了 assert 在 GoLang 中的使用。在 Go 语言中使用断言:GoLang 不提供对断言的任何内置支持,但我们可以使用来自 Testify API 的广泛使用的第三方包断言。
Go 中的随机数生成
发布时间:2023/04/27 浏览次数:114 分类:Go
-
本篇文章介绍如何在 Go 语言中使用随机数生成功能。Go 中的随机数生成 Go 语言为随机数生成功能提供内置支持。 内置包 math 有方法 rand(),用于随机数生成。