지난 포스팅
웹 프로그래밍 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)
객체의 쌍으로 만들어주는 헬퍼입니다.
에러가 발생하지 않은 경우 error
는 nil
값을 같습니다.
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>
|
참고
https://gowebexamples.com/templates/
Author:
JeHwanYoo
License:
Copyright (c) 2022 CC-BY-NC-4.0 LICENSE