確認環境
$ go version
go version go1.15.5 darwin/amd64
ファイルの準備
ファイルの全体像
$ tree
.
├── main.go
└── templates
├── home.tmpl
└── layout.tmpl
1 directory, 3 files
main.go
package main
import (
"fmt"
"net/http"
"text/template"
)
func Home(w http.ResponseWriter, r *http.Request) {
parsedTemplate, _ := template.ParseFiles("./templates/home.tmpl", "./templates/layout.tmpl")
intArray := []int{1, 20, 3, 40}
err := parsedTemplate.Execute(w, intArray)
if err != nil {
fmt.Println("Error:", err)
}
}
func main() {
http.HandleFunc("/", Home)
_ = http.ListenAndServe(":8081", nil)
}
sample/templates/home.tmpl
{{ template "layout" . }}
{{ define "content" }}
Home page
<ul>
{{ range . }}
<li>{{ . }}</li>
{{ end }}
</ul>
{{ end }}
sample/templates/layout.tmpl
{{ define "layout" }}
<html>
<body>
<p>content</p>
{{ block "content" .}}
{{ end }}
<p>in layout</p>
<ul>
{{ range . }}
<li>{{ . }}</li>
{{ end }}
</ul>
</body>
</html>
{{ end }}
ブラウザにアクセス
サーバー起動
$ go run main.go
生成されてる html の確認
$ curl localhost:8081
<html>
<body>
<p>content</p>
Home page
<ul>
<li>1</li>
<li>20</li>
<li>3</li>
<li>40</li>
</ul>
<p>in layout</p>
<ul>
<li>1</li>
<li>20</li>
<li>3</li>
<li>40</li>
</ul>
</body>
</html>
感想
初見だと、range
ブロックの .
と、変数をアサインしてる .
の区別が難しいと思いました。