Go
golang
Revel
gin
beego

Goフレームワークのパフォーマンス比較

More than 3 years have passed since last update.

GoはGoogleによって開発されている言語で主な特徴として並行処理、静的型づけ、シンプルな記述がある。

2009年に誕生したみたいだが、他の言語と同じく既に多くのWebフレームワークがあり、どのフレームワークがパフォーマンスが良いのか調べました。

テスト方法としては
・1,0000件のGETリクエストを飛ばしてjsonで応答を返す
・テスト機種、MacBook Pro (Retina, 15-inch, Mid 2015)、2.8 GHz Intel Core i7、16 GB 1600 MHz DDR
・三回繰り返した平均

下記がテストコードである

performance.go
package main

import (
    "net/http"
    "io/ioutil"
    "time"
    "fmt"
    "flag"
)

func main() {
    start := time.Now()
    var port string
    flag.StringVar(&port, "port", "3000", "文字列を入力します。")
    flag.Parse()

    url := fmt.Sprintf("http://localhost:%s/", port)
    for i := 0; i < 10000; i++ {
        resp, _ := http.Get(url)
        defer resp.Body.Close()
        byteArray, _ := ioutil.ReadAll(resp.Body)
        fmt.Println(string(byteArray))
    }
    end := time.Now().Sub(start)
    fmt.Printf("%s秒", end)
}

テストするフレームワーク

・Revel :0.12.0
・beego :1.5.0
・Gin :
・martini
・goji

結果

フレームワーク 結果
Gin 2.51
goji 2.77
beego 2.88
martini 3.37
Revel 4.47

ginが早いですね、フルスタックなフレームワークでbeegoも早かったのが意外です。

ちなみに早いものだと4分から5分で100万件のリクエストをさばけることになるのですが驚異的ですね、ORMマッパーを入れて検証していないのではっきりした数値はわかりませんが。大幅にインフラコストが削減できそうな気がします。

ソースコードは以下を参照ください
https://github.com/t-fukui/performance_test