計算機科学のブログ

Go - a pattern to follw - HTML Templates - if, range

Head First GoJay 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>%