Go - a pattern to follw - HTML Templates - if, range
Head First Go、 Jay McGavren(著)、O’Reilly Media)の Chapter 16(a pattern to follw - HTML Templates)、p.463(Exercise)の解答を求めてみる。
bill.html
<h1>Invoice</h1>
<p>Name :{{.Name}}</p>
{{if .Paid}}
<p>Paid - Thank you!</p>
{{end}}
<h1>Fees</h1>
{{range .Charges}}
<p>${{ . }}</p>
{{end}}
<p>Total: ${{ .Total}}</p>
コード
bill.go
package main
import (
"html/template"
"log"
"os"
)
func check(err error) {
if err != nil {
log.Fatal(err)
}
}
type Invoice struct {
Name string
Paid bool
Charges []float64
Total float64
}
func main() {
html, err := template.ParseFiles("bill.html")
check(err)
bill := Invoice{
Name: "Mary Gibbs",
Paid: true,
Charges: []float64{23.19, 1.13, 42.79},
Total: 67.11,
}
err = html.Execute(os.Stdout, bill)
check(err)
}
入出力結果(Terminal, Zsh)
% go run ./bill.go
<h1>Invoice</h1>
<p>Name :Mary Gibbs</p>
<p>Paid - Thank you!</p>
<h1>Fees</h1>
<p>$23.19</p>
<p>$1.13</p>
<p>$42.79</p>
<p>Total: $67.11</p>%