Golang의 HTML 템플릿 내부에서 If-Else 및 스위치 루프 사용
Jay Singh
2023년6월20일
HTML 템플릿은 코드 삽입에 대해 안전한 HTML 출력을 생성하기 위한 데이터 기반 템플릿을 지원하는 Golang(Go) 패키지입니다. HTML/템플릿 활용의 중요한 이점 중 하나는 상황에 맞는 자동 이스케이프를 사용하여 안전하고 이스케이프된 HTML 출력을 생성한다는 것입니다.
결과적으로 출력이 HTML일 때마다 항상 텍스트 템플릿 대신 HTML 템플릿 패키지를 사용해야 합니다. HTML 템플릿에서 if-else
와 switch
를 사용하는 몇 가지 예를 살펴보겠습니다.
Golang의 HTML 템플릿 내부에서 if-else
루프 사용
이 예에서는 ToDo
목록 항목인 ToDo
및 PageData
의 데이터를 보유하는 두 개의 구조체를 생성합니다. 정의된 HTML 템플릿 tmpl
이 생성되고 구문 분석됩니다.
마지막으로 Execute()
함수, 데이터 및 구문 분석된 HTML 템플릿에 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에서 스위치
루프 내부 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: