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言語でつくるインタプリタ

page_footer_300rect




page_footer_300rect




-BackEnd
-,

執筆者:


comment

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

CAPTCHA


関連記事

Go言語

Go言語の基礎〜基本構文その2〜

1 はじめに2 配列3 スライス3.1 スライスの宣言3.2 len3.3 append3.4 range3.5 値の切り出し3.6 可変長引数4 map4.1 宣言と初期化4.2 マップの操作4.3 ...

icon

PHP、Ruby、Pythonのfor構文を比較してみた

1 はじめに1.1 環境2 ドキュメント2.1 PHP2.2 Ruby2.3 Python3 1から100まで出力してみる3.1 PHP3.2 Ruby3.3 Python4 リスト型(配列)の出力4 ...

Pythonで書かれたスクレイピングのコードをRubyで書いてみる

1 はじめに2 仕様3 ソースコード4 使用したモジュール、Gem5 対象ページを取得6 XPATHから目的のものを抜き出す7 次のページのリンクを取得する8 さいごに はじめに 以前、技術評論社さん ...

【Git】マージコミットを消したい

1 はじめに2 例えばこんなことってないでしょうか?3 マージコミットを消す4 さいごに はじめに こんにちは、tonnyです。 今回はGitのケーススタディ的なものを書きたいと思います。 反面教師と ...

rails

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

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

フォロー

follow us in feedly

page_side_300rect

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

アプリ情報

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