BackEnd

GoのWeb Application Framework

投稿日:2018年10月15日 更新日:

はじめに

Go言語の連載4回目です。今回はGoのWeb Application Frameworkについて紹介します。

代表的なGoのWAF

皆さんはWAFがどのようなものかご存知だとは思いますが、改めて簡単に説明します。WAFは動的なウェブサイトなどの開発をサポートするアプリケーションフレームワークです。WAFが提供する代表的な機能としては、ORM、テンプレートエンジン、セッション管理などが挙げられます。本ブログでよく取り上げるRailsもWAFの一種です。

GoにおけるWAFは大きく2つに分けられます。1つは軽量なWAF、もう一つはフルスタックなWAFです。Goでは大きくて多機能なアプリケーションを作るのではなく、小さくてシンプルなアプリケーションを組み合わせて使うことが良いとされています。そのため、軽量なWAFが主流なようです。

軽量なWAF

代表的なWAFとして「Echo」と「Gin」を紹介します。

Echoは2015年に登場した新しいWAFです。RESTful APIをつくるのに向いているようです。Echoの設定に関してはこちらが参考になります。

GinはMartiniというGoの初期からあるWAFを参考に、より高速に動作するように実装されたWAFです。Martiniと比べて40倍ほど高速なようです。

フルスタックなWAF

代表的なWAFとして「Beego」と「Revel」を紹介します。

Beegoは主に中華圏で人気のあるWAFです。専用のCLIツールがある、LiveReloadされる等の特徴があります。くわしくはこちらをご覧ください。

RevelはRailsやPlay Frameworkから影響を受けたWAFです。他の言語でMVCフレームワークを使用した経験があるかたには親しみやすい作りになっているようです。Revelの設定に関してはこちらが参考になります。

Ginを使ってみる

それでは、実際にGinを使ってみます。事前準備としてGinをインストールします。

クエリパラメータ+ポストパラメータ

クエリパラメータおよびポストパラメータへのアクセスは下記のように行います。

ポストパラメータは PostForm か DefaultPostForm で取得できます。同様に、クエリパラメータは Query か DefaultQuery で取得できます。

ファイルアップロード

ファイルのアップロードは下記のように行います。

アップロードしたファイルは SaveUploadedFile で保存することができます。

URLのグループ化

下記のようにURLをグループ化することができます。

上記の例では /v1/login と /v2/login のようにURLをグループ化することができます。

ログ出力

ログ出力は下記のように行います。

このようにすると、 os.Create で指定したファイル名でログが出力されます。

JSONのバインド

JSONのバインドは下記のように行います。

User string `json:"user" binding:"required"` のようにJSONのキーを指定します。binding:”required” を指定した場合、バリューが空の場合にエラーが返ります。

HTMLのレンダリング

HTMLのレンダリングは下記のように行います。

そして、templates/posts/index.tmpl と templates/users/index.tmpl を以下のように作成します。

{{.title}} の部分には main で渡している title の値が表示されます。

リダイレクト

リダイレクトは下記のように行います。

localhost:8080/test にアクセスすると http://www.google.com/ にリダレクトされます。

GinのMiddlewareの紹介

Ginにはミドルウェアを追加することで様々な機能を追加することができます。ここでは、Session、Secure、Zapを紹介します。

Session

Sessionはセッション管理のミドルウェアです。Cookie、Redisの他にMongoDBなどにも対応しています。Sessionを使ったサンプルコードは下記のとおりです。

localhost:8080/incr にアクセスすると、レスポンスのcountが1、2、3と増加していきます。

Secure

SecureはSSL通信のためのミドルウェアです。サンプルコードは下記のとおりです。

Zap

Zap高速で低アロケーションなロギングライブラリです。サンプルコードは下記のとおりです。

さいごに

GoのWeb Application Frameworkをいくつか紹介し、その中の一つであるGinの基本的な使い方とミドルウェアを紹介しました。今後はORMなどについて調べていこうと思います。

Go記事の連載などは、こちらをご覧ください。

おすすめ書籍

スターティングGo言語  Goプログラミング実践入門 標準ライブラリでゼロからWebアプリを作る impress top gearシリーズ  みんなのGo言語[現場で使える実践テクニック]  Go言語でつくるインタプリタ

blog-page_footer_336




blog-page_footer_336




-BackEnd
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

麻雀で自分が何を切るか学習させる

1 はじめに2 プロジェクト名を決めてみる3 何切る問題で考慮される要素3.1 手牌3.2 ドラ3.3 考慮していない要素(本当は入れたい)4 学習の方法5 さいごに はじめに 前回執筆しました、配牌 ...

rails

RailsでS3に画像をアップロードする

1 はじめに2 今回やりたいこと3 下準備3.1 ImageMagickをインストールする3.2 Gemをインストールする4 レコード生成時にファイルを指定してアップロードする4.1 アップローダを作 ...

rails

Railsでの非同期処理とDelayed Job

1 はじめに2 Active Job2.1 Active Jobの役割2.2 ジョブを作成する2.3 ジョブをキューに登録する2.4 コールバック2.5 例外3 Delayed Job3.1 設定3. ...

rails

【Puma】アプリサーバのチューニング

1 はじめに2 チューニングで注意する項目3 子プロセスの数3.1 最低3つの子プロセスを割り当てる3.2 最大子プロセス数3.3 CPUコア数と子プロセス数3.4 なぜPumaの子プロセス数を増やす ...

laravel logo

Laravelのバリデーションtips

1 はじめに2 配列のバリデーションでRule::uniqueを使う時のカラム名を指定したい3 配列バリデーションのエラーメッセージ制御4 カスタムバリデーションで、他の属性名を参照したい5 番外:複 ...

フォロー

follow us in feedly

blog-page_side_responsive

2018年10月
« 9月 11月 »
 123456
78910111213
14151617181920
21222324252627
28293031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。