Verwenden Sie die If-Else- und Switch-Schleife innerhalb der HTML-Vorlage in Golang
-
Verwenden Sie die
if-else
-Schleife innerhalb von HTML-Vorlagen in Golang -
Verwenden Sie das
switch
Loop Inside HTML-Template in Golang
HTML-Vorlage ist ein Golang (Go)-Paket, das datengesteuerte Vorlagen zum Erstellen sicherer HTML-Ausgaben gegen Code-Injektion unterstützt. Ein bedeutender Vorteil der Verwendung von HTML/Templates besteht darin, dass es eine sichere HTML-Ausgabe mit Escapezeichen generiert, indem kontextabhängiges automatisches Escapezeichen verwendet wird.
Daher sollte immer dann, wenn die Ausgabe HTML ist, das HTML-Vorlagenpaket anstelle einer Textvorlage verwendet werden. Sehen wir uns einige Beispiele für die Verwendung von if-else
und switch
in der HTML-Vorlage an.
Verwenden Sie die if-else
-Schleife innerhalb von HTML-Vorlagen in Golang
In diesem Beispiel erstellen wir zwei Strukturen, um die Daten unserer ToDo
-Listenelemente zu speichern: ToDo
und PageData
. Das definierte HTML-Template tmpl
wird erstellt und geparst.
Schließlich rendern wir unser HTML, indem wir es der Funktion Execute()
, den Daten und dem geparsten HTML-Template übergeben.
Code:
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)
}
Ausgang:
Personal TODO list
Task 1 ✔
Task 2
Task 3
Verwenden Sie das switch
Loop Inside HTML-Template in Golang
Code:
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)
}
}
}
Ausgang:
This is a hypothesis testing
This is using switch case
Menu
1:
2:
3:
Pick any option: