前回の続きです:
CentOS に Go をインストールする
Go の実行環境が導入できたので、テンプレートエンジンを使ってみます。まずは HTML テンプレートを作成しておきます。base.html というファイル名で以下の内容を作成/保存します:
↑ほぼ HTML ですが、赤字で書いた部分が変数になります。変数名としては Title と Body の2つがあり、その中身はこの後の Go アプリの中で定義して渡します。また全体を "base" という名前で定義しています(青字部分)。
次にこのテンプレートを使って画面を表示する Go のウェブアプリを作成します(http2.go というファイル名で、base.html と同じディレクトリに作成します):
基本形は前回の Go ウェブアプリとほぼ同じですが、まず html/template を使う宣言をして、テンプレートに上記で作成した(同じディレクトリ上にある) base.html を使う宣言をしています。
またテンプレート内の変数 Title, Body を、それぞれ title, body という URL パラメータを受け取って定義するようにしています。
この状態で http2.go を実行します:
そしてウェブブラウザでこのサーバーの 8080 番ポートのルートパスに、パラメータ title と body を指定してアクセスすると、指定した内容がウェブページの一部になって表示されるはずです:
これで Go でもテンプレートエンジンっぽいこともできました。
CentOS に Go をインストールする
Go の実行環境が導入できたので、テンプレートエンジンを使ってみます。まずは HTML テンプレートを作成しておきます。base.html というファイル名で以下の内容を作成/保存します:
{{define "base"}}<!doctype html> <html> <head> <meta charset="utf-8"/> <title>{{.Title}}</title> </head> <body> <div class="content"> <h1>{{.Title}}</h1> <hr/> <div> {{.Body|safehtml}} </div> </div> </body> </html>{{end}}
↑ほぼ HTML ですが、赤字で書いた部分が変数になります。変数名としては Title と Body の2つがあり、その中身はこの後の Go アプリの中で定義して渡します。また全体を "base" という名前で定義しています(青字部分)。
次にこのテンプレートを使って画面を表示する Go のウェブアプリを作成します(http2.go というファイル名で、base.html と同じディレクトリに作成します):
package main import( "net/http" "html/template" ) func viewHandler( w http.ResponseWriter, req *http.Request ){ funcMap := template.FuncMap{ "safehtml": func(text string) template.HTML { return template.HTML(text) }, } templates := template.Must(template.New("").Funcs(funcMap).ParseFiles("base.html")) dat := struct { Title string Body string }{ Title: req.FormValue( "title" ), Body: req.FormValue( "body" ), } err := templates.ExecuteTemplate(w, "base", dat) if err != nil { http.Error( w, err.Error(), http.StatusInternalServerError ) } } func main(){ http.HandleFunc( "/", viewHandler ) http.ListenAndServe( ":8080", nil ) }
基本形は前回の Go ウェブアプリとほぼ同じですが、まず html/template を使う宣言をして、テンプレートに上記で作成した(同じディレクトリ上にある) base.html を使う宣言をしています。
またテンプレート内の変数 Title, Body を、それぞれ title, body という URL パラメータを受け取って定義するようにしています。
この状態で http2.go を実行します:
# go run http2.go
そしてウェブブラウザでこのサーバーの 8080 番ポートのルートパスに、パラメータ title と body を指定してアクセスすると、指定した内容がウェブページの一部になって表示されるはずです:
これで Go でもテンプレートエンジンっぽいこともできました。