はじめに
今回は、Go言語とFasthttpを使って超高速なウェブサービスを構築する方法について、詳しく見ていきましょう。
Fasthttpとは?
FasthttpはGo言語で作られた、高性能なHTTPパッケージです。標準の”net/http”パッケージよりも10倍高速であり、メモリアロケーションも少ないとされています。
関連する項目としてFiberも紹介していますのでこちらも参考にしてください
Fasthttpのインストール
Fasthttpのインストールは簡単で、以下のようにgo get
コマンドを使用します。
go get github.com/valyala/fasthttp
Fasthttpの基本的な使い方
Fasthttpの基本的な使い方について見ていきましょう。以下は、”Hello, World!”を表示する最もシンプルなFasthttpアプリの例です。
package main
import (
"github.com/valyala/fasthttp"
)
func main() {
fasthttp.ListenAndServe(":8080", func(ctx *fasthttp.RequestCtx) {
ctx.WriteString("Hello, World!")
})
}
fasthttp.ListenAndServe()
関数でサーバーを起動し、ポート8080でリクエストを待ち受けます。この関数はリクエストハンドラを引数に取ります。ハンドラは各リクエストに対して呼び出され、fasthttp.RequestCtx
オブジェクトを引数に取ります。
ルーティング
Fasthttp自体はルーティング機能を提供していませんが、別のパッケージであるfasthttprouterを使うことで、高速なルーティング機能を利用することができます。
go get github.com/buaazp/fasthttprouter
package main
import (
"fmt"
"github.com/buaazp/fasthttprouter"
"github.com/valyala/fasthttp"
)
func main() {
router := fasthttprouter.New()
router.GET("/", func(ctx *fasthttp.RequestCtx) {
fmt.Fprintf(ctx, "Hello, World!")
})
fasthttp.ListenAndServe(":8080", router.Handler)
}
この例では、fasthttprouter.New()
でルーターを作成し、router.GET()
でルートURLにGETリクエストが来たときのハンドラを設定しています。そして、fasthttp.ListenAndServe()
でサーバーを起動し、ルータのハンドラを引数に渡しています。
リクエストとレスポンス
Fasthttpでは、リクエストとレスポンスのデータにアクセスするための多くのメソッドが提供されています。以下に、いくつかの基本的な例を示します。
func handler(ctx *fasthttp.RequestCtx) {
fmt.Printf("Requested path is %q\n", ctx.Path())
fmt.Printf("Host is %q\n", ctx.Host())
fmt.Printf("Query string is %q\n", ctx.QueryArgs())
fmt.Printf("RequestURI is %q\n", ctx.RequestURI())
fmt.Printf("Method is %q\n", ctx.Method())
fmt.Printf("Request headers are %q\n", ctx.Request.Header)
ctx.WriteString("Hello, World!")
}
クライアント
Fasthttpには、高性能なHTTPクライアントも含まれています。以下に、GETリクエストを送る簡単な例を示します。
package main
import (
"fmt"
"github.com/valyala/fasthttp"
)
func main() {
req := fasthttp.AcquireRequest()
resp := fasthttp.AcquireResponse()
defer fasthttp.ReleaseRequest(req)
defer fasthttp.ReleaseResponse(resp)
req.SetRequestURI("http://example.com")
if err := fasthttp.Do(req, resp); err != nil {
fmt.Println("request failed:", err)
return
}
fmt.Println("response status code:", resp.StatusCode())
fmt.Println("response body:", string(resp.Body()))
}
以上、Fasthttpの使い方について詳しく見てきました。高速でスケーラブルなウェブサービスを構築するための強力なツールですので、ぜひ使ってみてください。