Go 템플릿
Source: Dev.to
Go 템플릿이란?
Go 템플릿은 데이터와 일반 텍스트 또는 HTML 파일을 섞어 동적 콘텐츠를 생성하는 방법입니다. 템플릿 안의 플레이스홀더를 Go 코드에서 제공한 값으로 교체할 수 있어, 사용자 입력이나 데이터베이스 내용에 따라 페이지를 쉽게 생성할 수 있습니다.
템플릿은 {{ }}와 같은 이중 중괄호로 작성된 플레이스홀더를 포함하는 파일일 뿐입니다. 예를 들어 {{ .Name }}은 템플릿에 전달된 데이터 객체의 Name 필드를 삽입합니다. 점(.)은 루트 데이터 객체를 가리킵니다.
데이터 구조 정의
보통 표시하고자 하는 데이터를 담는 구조체(또는 맵)를 정의합니다:
type PageData struct {
Title string
Message string
}
템플릿 파일 예시
아래는 변수 삽입, 조건문, 반복문 등 Go 템플릿의 여러 기능을 활용한 간단한 HTML 템플릿 예시입니다:
{{ .Title }}
## {{ .Title }}
{{ .Message }}
{{ if .IsLogged }}
Welcome back, {{ .User }}!
{{ else }}
Please login to continue.
{{ end }}
## Your Tasks:
{{ range .Tasks }}
- {{ . }}
{{ else }}
- No tasks available.
{{ end }}
Go 코드에서 템플릿 사용하기
다음 Go 프로그램은 위 템플릿 파일을 파싱하고 PageData 인스턴스로 실행합니다:
package main
import (
"html/template"
"net/http"
)
type PageData struct {
Title string
Message string
IsLogged bool
User string
Tasks []string
}
func handler(w http.ResponseWriter, r *http.Request) {
data := PageData{
Title: "Go Templates Advanced Example",
Message: "Using conditions and loops in templates",
IsLogged: true,
User: "Ian",
Tasks: []string{
"Learn Go templates",
"Build a web app",
"Practice Go daily",
},
}
tmpl := template.Must(template.ParseFiles("index.html"))
tmpl.Execute(w, data)
}
func main() {
http.HandleFunc("/", handler)
http.ListenAndServe(":8080", nil)
}
요약
Go 템플릿을 사용하면 프레젠테이션(HTML 또는 텍스트)과 비즈니스 로직을 분리하고, 서로 다른 데이터를 사용해 레이아웃을 재사용하며, 동적 웹 페이지, 보고서 또는 기타 텍스트 기반 콘텐츠를 효율적으로 만들 수 있습니다. 조건문, 반복문, 내장 함수(len 등)와 같은 기본 로직을 지원해 코드를 깔끔하고 유지보수하기 쉽게 만들어 줍니다.