はじめに
こんにちは。某学校でプログラミング等の勉強中のサーバーサイドのプログラマーのワタタクです。
さて今回は「Go言語を真剣に勉強してみた〜WEBアプリケーション開発編〜」と言うこと3、4回ぐらいに分けて紹介していけたらと思います。
では、早速いってみましょう
インポート
パッケージの**<<"net/http">>**をインポートします。
サーバー起動
"net/http"の**ListenAndServe()**を使います。
http.ListenAndServe("サーバ名:ポート番号", ハンドラ)
*第一引数のサーバ名を省略すると、localhostになる。
*第二引数は通常nilでよい。
HTMLファイルの読み込み
"net/http"の**Handle()**を使います。
http.Handle("アクセス先ルート", http.FileServer(http.Dir("読み込むHTMLファイルのディレクトリ名")))
<<以下例>>
○staticディレクトリの中のHTMLファイルを読み込む
<ディレクトリ構造>
|-static
| |- index.html
|-server.go
func main() {
http.Handle("/", http.FileServer(http.Dir("static"))))
http.ListenAndSeave(":9999", nil)
}
http://localhost:9999にアクセスするとstaticディレクトリの中のindex.htmlが呼ばれる。
テンプレートファイルの使用
静的ページではなくGoで動的ページを作りたいときに使う
インポート
パッケージの**<<"html/template">>**をインポートします。または**<<"text/template">>**をインポートします。
*text/template:汎用テンプレート用のパッケージ。
*html/template:プレースホルダに変換対象の文字列のhtmlタグをエスケープする。
テンプレートファイルの場所指定
path, _ := os.Getwd()//カレントディレクトリの取得(osパッケージをインポート)
t := template.Must(template.ParseFiles(path + "テンプレートファイルのある所のパス"))
テンプレートの描画
t.ExecuteTemplate(http.ResponseWrite, "テンプレートファイル名", 送る値)
ハンドラの登録
net/httpパッケージの**HundleFunc()**を使う。
http.HandleFunc("アクセス先ルート", クロージャ)
func クロージャ(w http.ResponceWrite, r *http.Request {
//アクセス先ルートにアクセスされたときに実行する事を記述
}
テンプレートファイルの値表示(アクションタグ)
- テンプレートに渡された引数を出力
{{ . }}
- テンプレートに渡された値が構造体
{{ .構造体のフィールド名 }}
- 条件分岐
{{ if .(構造体のフィールド名) }}
{{ else }}
{{ end }}
- ループ
{{ range .(構造体のフィールド名) }}
{{ else }}
{{ end }}
*渡された引数が配列やスライスといった配列系しか回せない
テンプレートに渡された引数がからなら処理2をからでなければ処理1を実行- テンプレートに渡された引数が空でなければ処理1を空なら処理2が出力される。
{{ with .(構造体のフィールド名) }}
//処理1
{{ else }}
//処理2
{{ end }}
<<以下例>>
○staticディレクトリの中のテンプレートファイルを読み込む
<ディレクトリ構造>
|-static
| |- index.html.tpl
|-server.go
func clockHandler(w http.ResponseWriter, r *http.Request) {
path, _ := os.Getwd()
t := template.Must(template.ParseFiles( path + "/static/index.html.tpl"))
if err := t.ExecuteTemplate(w, "index.html.tpl", time.Now()); err != nil {
log.Fatal(err)
}
}
func main() {
http.HandleFunc("/", clockHandler)
http.ListenAndSeave(":9999", nil)
}
<!DOCTYPE html>
<html>
<body>
今現在{{ .Hour }}時{{ .Minute }}分です。
</body>
</html>
http://localhost:9999にアクセスするとstaticディレクトリの中のindex.htmlが呼ばれる。
以上。
もし何か間違っている等のご指摘があればご連絡ください。
最後まで読んで頂きありがとうございました。
次回「Go言語を真剣に勉強してみた〜WEBアプリケーション開発編②〜」
よろしければ、こちらもご覧ください。
「Go言語を真剣に勉強してみた〜基本構文編①(変数、定数、条件分岐、繰り返し処理)〜」についてはこちらから。
「Go言語を真剣に勉強してみた〜基本構文編②(配列)〜」についてはこちらから。
「Go言語を真剣に勉強してみた〜基本構文編③(関数)〜」についてはこちらから。
「Go言語を真剣に勉強してみた〜基本構文編④(ポインタ、構造体)〜」についてはこちらから。
「Go言語を真剣に勉強してみた〜パッケージ編〜」についてはこちらから。
「Go言語を真剣に勉強してみた〜データベース接続(MySQL)編〜」についてはこちらから。
追記(2018/10/20)
その他のアクションタグ
- 引数のbool値をnot演算する
{{ not 引数 }}
- 引数1と引数2でand演算する
{{ and 引数1 引数2 }}
- 引数1と引数2でor演算する
{{ or 引数1 引数2 }}
- 引数をエスケープする
{{ html 引数 }}
- テンプレート変数
{{ $変数名 := 値 }}
- テンプレートに渡された引数配列でそのサイズを返す
{{ len 引数 }}