をテンプレート内のTitle
それはどうやってテンプレートに終わるのですか? Template.Execute()
の引数として渡します。これは(当然ながら)現在の年にも機能します。
これは、関数を登録するよりも優れた方法です。
t := template.Must(template.New("").Parse(
"<html><body>{{ .Title }}; Year: {{.Year}}</body></html>"))
myObject := struct {
Title string
Year int
}{"Test Title", time.Now().UTC().Year()}
if err := t.Execute(os.Stdout, myObject); err != nil {
fmt.Println(err)
}
出力(Go Playground上でそれを試してみてください):
<html><body>Test Title; Year: 2009</body></html>
(注:これは、ように見えることができる方法であるゴー遊び場の現在の日付/時刻が2009-11-10 23:00:00
で、あなたが見る理由です2009
)。
テンプレートには、複合語論理が含まれてはいけません。テンプレートで何か(または見た目が)複雑すぎる場合は、Goコードで結果を計算し、その結果をデータに渡して実行するか、テンプレートにコールバック関数を登録し、その関数を呼び出して関数を呼び出して挿入する戻り値
今年はおそらく複雑な論理ではありません。しかし、Goは静的にリンクされた言語です。実行可能バイナリには、Go(ソース)コードが明示的に参照するパッケージと関数のみが含まれることが保証されています。これは標準ライブラリのすべてのパッケージに適用されます(runtime
パッケージを除く)。したがって、テンプレートテキストは、time
パッケージのようなパッケージから関数を参照して呼び出すことはできません。実行時に利用できるという保証はないからです。
myYouオブジェクトにCurrentYearフィールドを追加し、テンプレートに{{.CurrentYear}}を使用すると、何が問題になりますか? –