はじめに
Golang入門.2 -http.Handleの実装を見る-の続きです。また今回から実際のアプリを作っていきます。詳細は決めていませんが、Grammarlyと併用して英語の文章を快適に書くためのエディタを作ろうと思っています。
今回のテーマ
html/template
を使ってhtmlファイルを返せるようにします。なお、内容はWriting Web Applicationsに準拠します。
概念
今回はエディタとして必要な入力画面を出せるようにします。基本的にはIndexHandler
(前回までのHelloHandler
)内でhtmlファイルを読み込み、必要な変数をPage struct
を通して渡しています。
コード
main.go
package main
import (
"html/template"
"log"
"net/http"
)
type IndexHandler struct {}
type Page struct {
Title string
Body []byte
}
func loadPage() (*Page, error) {
return &Page{
Title: "Blog Editor",
Body: []byte(""),
}, nil
}
func(h *IndexHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
p, _ := loadPage()
t, _ := template.ParseFiles("template/index.html")
t.Execute(w, p)
}
func main() {
index := IndexHandler{}
server := http.Server{
Addr: "127.0.0.1:8080",
}
http.Handle("/", &index)
log.Fatal(server.ListenAndServe())
}
template/index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>{{printf "%s" .Title}}</title>
</head>
<body>
<form>
<div>
<textarea rows="20" cols="80">
</textarea>
</div>
</form>
</body>
</html>
実行・確認
go run main.go
の後にブラウザ上でlocalhost:8080
を確認すると入力画面が出力されています。なお、以降はブラウザ上でGrammarlyが自動で作動することを想定します。例えばChromeの場合は拡張機能としてインストールして設定することができます。