Skip to content

Instantly share code, notes, and snippets.

@yosuke-furukawa
Last active May 8, 2021 14:22
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yosuke-furukawa/8816249 to your computer and use it in GitHub Desktop.
Save yosuke-furukawa/8816249 to your computer and use it in GitHub Desktop.

GolangでWebAppを作るとき(その3)

今回はゆるふわ系でgolangのWAFまとめ。

本当ならgoweb + angular とかでなにか作った話をしたかったが、ムリポ。

というわけでまとめます。

revel

GitHub : https://github.com/robfig/revel

Site : http://robfig.github.io/revel/

フルスタックWAF、多分最もgolangのwafの中で人気ある(starの数的な意味で)。 フルスタックWAFとはいえ、JSONを返すだけのパフォーマンスの勝負でも上位。

http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json

https://github.com/TechEmpower/FrameworkBenchmarks

![image](http://gyazo.com/f1464e1cb4b36a166db83bff74ff3a35.png image)

※ちなみに1位はpure golang

中にmail senderや web socket serverなども組み込まれてて便利、やりたい事は一旦revel apiの中を見ればよさ気。

https://github.com/robfig/revel/tree/master/samples

特徴

falcore

GitHub : https://github.com/ngmoco/falcore

Site : http://fitstar.github.io/falcore/

我らがngmoco製。ただ最近、ngmocoじゃなくて、fitstarという方がforkして引き継いでくれてるみたい。

https://github.com/fitstar/falcore

fitstar製が今後の主流になってくる様子。本家と比較するとGAEサポートが付いているみたい。 フルスタックWAFだけど、こちらもやはり性能勝負ではrevelとほぼ同等。稀にfalcoreがrevelやpure golangを抜くことも。

http://www.techempower.com/benchmarks/#section=data-r8&hw=i7&test=json

特徴

こんな感じでやるみたい。HUPを送ったら自動でforkして自分自身を殺す?みたいな?

ビルトインで自分のリクエストレスポンスの時間を測れる、嬉しい機能。どのフィルターで時間がかかっているか分かる。

beego

GitHub : https://github.com/astaxie/beego

Site : http://beego.me/

astaxieさんという、先週紹介したGo Webプログラミングの本を書いた人。 日本語訳:https://github.com/astaxie/build-web-application-with-golang/tree/master/ja

beego is a Go Framework inspired by tornado and sinatra.

とのことなので、割りとミニマムスタックなWAF、MVCフレームワークに特化してる感じ。

とはいえ、中にtemplateがあったり、ORMサポートしてたりと結構フルスタックよりのフレームワーク。revel程高機能ではない。

性能勝負でもrevel, falcoreには劣るがそこそこ速い。

特徴

  • ドキュメント超親切(http://beego.me/docs/intro/)
  • ORMサポート
  • MVCに特化してる感じ、中国では割りと使われてるっぽい。

goweb

GitHub : [https://github.com/stretchr/goweb]

個人的には一番好きな超シンプルフレームワーク。 覚えること少ない、基本的にルーティングとJSONのレンダリングしかしない。

性能勝負では誰も実装してないので、割りと後発なのかも。ただ、tenntennさんをはじめとして割りと日本でも使われ始めてる。

http://qiita.com/tenntenn/items/7f532cc883c9ba3151a8

goweb1から最近goweb2ができてガラッと実装を変更しており、性能も速くなっているとのこと。

特徴

  • simple
  • ここから学ぶといいかんじかも。

gorilla

GitHub: https://github.com/gorilla/

Site: http://www.gorillatoolkit.org/

isuconで使われてたtoolkit,正確にはwafじゃない。

FAQに書いてある

Q. Is Gorilla a framework? A. No, it is a toolkit. Just use what you need with your favorite framework or the http package.

ということなので、単なるツールキット、WAFといっしょに使ってね、ということなので、WAFと一緒に使うと便利そうなツールが揃ってる。

https://github.com/gorilla/websocket https://github.com/gorilla/rpc https://github.com/gorilla/mux

まとめ

  • revelが高機能かつ高性能、でも覚えること多い
  • falcoreも高機能かつ高性能、性能もrevelに勝つこともあるが、メンテンナンス母体氏...
  • beego、MVC特化、document超親切。学ぶのに良さそう。中国のサービスでは実績ある。
  • goweb、マイクロフレームワーク、学ぶのによさ気。後発なので性能計測が一緒にされてないけど、シンプルなので使い勝手が良い。
  • gorilla 正確にはフレームワークじゃなくてツールキット。rpcの機能だけgowebに追加するとかいい感じにシナジれるといいかも。

というわけで

revelは一番無難。 gowebでシンプルな設計をしつつ、gorillaを組み合わせるというのが成長するには良さそう。 goweb, gorillaの組み合わせは性能検証してみたいところ。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment