지난 포스팅


웹 프로그래밍 with Golang 1 - Hello, World!

1. 템플릿이란?


Go의 템플릿(Template)은 Express의 템플릿 엔진과 비슷합니다.

보간 문법(Interpolation Syntax)를 이용하여 서버사이드 렌더링을 수행합니다.

1
2
3
4
5
6
7
8
9
10
<h1>{{.PageTitle}}</h1>
<ul>
{{range .Todos}}
{{if .Done}}
<li class="done">{{.Title}}</li>
{{else}}
<li>{{.Title}}</li>
{{end}}
{{end}}
</ul>

보간 문법은 중괄호({}) 두개를 사용하며 구문(statement)의 끝에는 {{end}}가 사용됩니다.

2. 템플릿 작성


main.go

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
package main

import (
"html/template"
"net/http"
)

type Todo struct {
Title string
Done bool
}

type TodoPageData struct {
PageTitle string
Todos []Todo
}

func main() {
tmpl := template.Must(template.ParseFiles("layout.html"))
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
data := TodoPageData{
PageTitle: "My TODO list",
Todos: []Todo{
{Title: "Task 1", Done: false},
{Title: "Task 2", Done: true},
{Title: "Task 3", Done: true},
},
}
tmpl.Execute(w, data)
})
http.ListenAndServe(":80", nil)
}

템플릿 문법을 사용하기 위해서는 html/template 패키지가 필요합니다.

template.ParseFiles("layout.html")은 템플릿 문법이 포함된 html을 파싱합니다.

template.Must()는 파싱된 html을 (*Template, error) 객체의 쌍으로 만들어주는 헬퍼입니다.

에러가 발생하지 않은 경우 errornil 값을 같습니다.

tmpl.Execute(w, data)data를 이용하여 페이지를 렌더링하고 출력물을 writer에 씁니다.

layout.html

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<h1>{{.PageTitle}}</h1>
<ul>
{{range .Todos}}
{{if .Done}}
<li class="done">{{.Title}}</li>
{{else}}
<li>{{.Title}}</li>
{{end}}
{{end}}
</ul>

<style>
li.done {
text-decoration : line-through;
font-weight: 100;
}
</style>
example

참고


https://gowebexamples.com/templates/