LoginSignup
1
2

More than 5 years have passed since last update.

Go言語を真剣に勉強してみた〜WEBアプリケーション開発編〜

Last updated at Posted at 2018-10-10

はじめに

こんにちは。某学校でプログラミング等の勉強中のサーバーサイドのプログラマーのワタタクです。:relaxed:
さて今回は「Go言語を真剣に勉強してみた〜WEBアプリケーション開発編〜」と言うこと3、4回ぐらいに分けて紹介していけたらと思います。
では、早速いってみましょう:point_up:

インポート

パッケージの<<"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

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

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)
}
index.html.tpl
<!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 引数 }}
1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2