コンテンツにスキップ

ベンチマーク

更新データ: これらのベンチマークは2026年3月にGin v1.12.0とGo 1.25.8を使用して収集されました。最新のベンチマーク結果については、go-http-routing-benchmarkリポジトリをご覧ください。

テスト環境:

  • ホストプラットフォーム: Apple M4 Pro
  • マシンスペック: macOS (Darwin 25.3.0), arm64
  • テスト日: 2026年3月15日
  • Ginバージョン: v1.12.0
  • Goバージョン: 1.25.8 (darwin/arm64)
  • ベンチマークソース: Go HTTP Router Benchmark

以下の表は、GitHub APIスループット(203ルート、全メソッド)で全ルーターをランク付けしたもので、実際のルーティングワークロードを最もよく表しています。ns/opが低いほど優れています。

Rank Router ns/op B/op allocs/op Zero-alloc
1 Gin 9,944 0 0
2 BunRouter 10,281 0 0
3 Echo 11,072 0 0
4 HttpRouter 15,059 13,792 167
5 HttpTreeMux 49,302 65,856 671
6 Chi 94,376 130,817 740
7 Beego 101,941 71,456 609
8 Fiber 109,148 0 0
9 Macaron 121,785 147,784 1,624
10 Goji v2 242,849 313,744 3,712
11 GoRestful 885,678 1,006,744 3,009
12 GorillaMux 1,316,844 225,667 1,588

主なポイント:

  • Gin、BunRouter、Echoがトップティアを形成しており、すべてヒープアロケーションゼロを達成し、GitHub API全体を約10マイクロ秒でルーティングします。
  • HttpRouterは非常に高速ですが、パラメータ付きルートごとに1回のアロケーションが発生します(203ルートで167回のアロケーション)。
  • Fiberもゼロアロケーションを達成していますが、fasthttpベースのベンチマークインフラストラクチャがイテレーションごとのリセットオーバーヘッドを追加するため、net/httpルーターとの直接比較には注意が必要です。
  • GorillaMuxGoRestfulは機能豊富ですが、桁違いに遅いため、レイテンシに敏感なアプリケーションには適していません。

Fiberに関する注意: Fiberのベンチマークはfasthttp.RequestCtxを使用し、イテレーションごとにResetを行います。これにより、net/httpベンチマークには存在しない一定のオーバーヘッドが追加されます。Fiber同士の比較は有効ですが、フレームワーク間の比較は慎重に解釈する必要があります。


ルーティング構造の読み込みに必要なメモリ(低いほど優れています)。バイト数の昇順でソートしています。

Router Bytes
HttpRouter 21,680
Gin 34,408
Macaron 36,976
BunRouter 51,232
Fiber 59,248
HttpServeMux 71,728
HttpTreeMux 73,448
Chi 83,160
Echo 91,976
Beego 98,824
Goji v2 117,952
GorillaMux 599,496
GoRestful 819,704
Router Bytes
HttpRouter 37,072
Gin 58,840
HttpTreeMux 78,800
Macaron 90,632
BunRouter 93,776
Chi 94,888
Echo 117,784
Goji v2 118,640
Beego 150,840
Fiber 163,832
GoRestful 1,270,848
GorillaMux 1,319,696
Router Bytes
HttpRouter 2,776
Gin 4,576
BunRouter 7,360
HttpTreeMux 7,440
Chi 8,008
Goji v2 8,096
Macaron 8,672
Beego 10,256
Fiber 10,840
Echo 10,968
GorillaMux 68,000
GoRestful 72,536
Router Bytes
HttpRouter 5,024
Gin 7,896
HttpTreeMux 7,848
BunRouter 9,336
Chi 9,656
Echo 13,816
Macaron 13,704
Fiber 15,352
Goji v2 16,064
Beego 19,256
GorillaMux 105,384
GoRestful 121,200

操作ごとに203のGitHub APIエンドポイントすべてをルーティング。

Rank Router ns/op B/op allocs/op
1 Gin 9,944 0 0
2 BunRouter 10,281 0 0
3 Echo 11,072 0 0
4 HttpRouter 15,059 13,792 167
5 HttpTreeMux 49,302 65,856 671
6 Chi 94,376 130,817 740
7 Beego 101,941 71,456 609
8 Fiber 109,148 0 0
9 Macaron 121,785 147,784 1,624
10 Goji v2 242,849 313,744 3,712
11 GoRestful 885,678 1,006,744 3,009
12 GorillaMux 1,316,844 225,667 1,588

操作ごとに13のGoogle+ APIエンドポイントすべてをルーティング。

Rank Router ns/op B/op allocs/op
1 BunRouter 348.5 0 0
2 Gin 429.7 0 0
3 Echo 451.1 0 0
4 HttpRouter 668.6 640 11
5 HttpTreeMux 2,428 4,032 38
6 Fiber 2,506 0 0
7 Chi 5,333 8,480 48
8 Beego 5,927 4,576 39
9 Macaron 7,294 9,464 104
10 Goji v2 8,000 15,120 115
11 GorillaMux 14,707 14,448 102
12 GoRestful 24,189 60,720 193

操作ごとに26のParse APIエンドポイントすべてをルーティング。

Rank Router ns/op B/op allocs/op
1 BunRouter 588.2 0 0
2 Gin 712.1 0 0
3 Echo 742.1 0 0
4 HttpRouter 948.5 640 16
5 HttpTreeMux 3,372 5,728 51
6 Fiber 4,250 0 0
7 Chi 8,863 14,944 84
8 Beego 10,541 9,152 78
9 Macaron 13,635 18,928 208
10 Goji v2 13,264 29,456 199
11 GorillaMux 25,886 26,960 198
12 GoRestful 54,780 131,728 380

操作ごとに157の静的ルートすべてをルーティング。ベースラインとしてhttp.ServeMuxを含みます。

Rank Router ns/op B/op allocs/op
1 HttpRouter 4,177 0 0
2 HttpTreeMux 5,363 0 0
3 Gin 5,528 0 0
4 BunRouter 5,997 0 0
5 Echo 6,897 0 0
HttpServeMux 18,172 0 0
6 Fiber 29,310 0 0
7 Chi 41,317 57,776 314
8 Beego 68,255 55,264 471
9 Macaron 81,824 114,296 1,256
10 Goji v2 84,459 175,840 1,099
11 GorillaMux 302,825 133,137 1,099
12 GoRestful 436,510 677,824 2,193

ルート:/user/:name — リクエスト:GET /user/gordon

Rank Router ns/op B/op allocs/op
1 BunRouter 12.22 0 0
2 Echo 17.75 0 0
3 Gin 23.31 0 0
4 HttpRouter 31.88 32 1
5 Fiber 114.4 0 0
6 HttpTreeMux 165.0 352 3
7 Chi 332.2 704 4
8 Beego 348.8 352 3
9 Goji v2 494.3 1,136 8
10 GorillaMux 630.6 1,152 8
11 Macaron 708.0 1,064 10
12 GoRestful 1,394 4,600 15

ルート:/:a/:b/:c/:d/:e — リクエスト:GET /test/test/test/test/test

Rank Router ns/op B/op allocs/op
1 BunRouter 41.86 0 0
2 Echo 43.76 0 0
3 Gin 44.20 0 0
4 HttpRouter 83.74 160 1
5 Fiber 271.6 0 0
6 HttpTreeMux 358.8 576 6
7 Chi 453.7 704 4
8 Beego 480.3 352 3
9 Goji v2 532.4 1,200 8
10 Macaron 799.7 1,064 10
11 GorillaMux 972.6 1,216 8
12 GoRestful 1,579 4,712 15

ルート:/:a/:b/.../:t(20セグメント) — リクエスト:GET /a/b/.../t

Rank Router ns/op B/op allocs/op
1 Gin 121.7 0 0
2 Echo 127.5 0 0
3 BunRouter 211.4 0 0
4 HttpRouter 290.2 704 1
5 Fiber 466.1 0 0
6 Goji v2 745.3 1,440 8
7 Beego 1,099 352 3
8 Chi 1,805 2,504 9
9 HttpTreeMux 1,857 3,144 13
10 Macaron 2,058 2,864 15
11 GorillaMux 2,223 3,272 13
12 GoRestful 3,337 7,008 20

ルート:/user/:name(レスポンス書き込みあり) — リクエスト:GET /user/gordon

Rank Router ns/op B/op allocs/op
1 BunRouter 25.86 0 0
2 Gin 27.65 0 0
3 HttpRouter 37.40 32 1
4 Echo 47.94 8 1
5 Fiber 125.7 0 0
6 HttpTreeMux 180.4 352 3
7 Chi 348.3 704 4
8 Beego 386.1 360 4
9 Goji v2 516.9 1,168 10
10 GorillaMux 665.5 1,152 8
11 Macaron 784.3 1,112 13
12 GoRestful 1,534 4,608 16