Skip to main content

Get full access to 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス and 60K+ other titles, with a free 10-day trial of O'Reilly.

There are also live events, courses curated by job role, and more.

10.5 Middlewareパターンを使って処理を分離する

アプリケーションのハンドラーを実装していると、多くのハンドラーで共通して実行したい処理があります。たとえば認証チェックを行ってログインしていなければログインフォームに遷移させたり、ロギングや、panic時のエラー制御、レスポンスのgzip化といったものです。すべてのハンドラーに同じ処理を実装するのは面倒ですし、共通する関心事はアプリケーションハンドラーとは別のレイヤーで処理したいでしょう。Goのウェブアプリケーションの世界では、これを実現するための仕組みを ミドルウェア と呼びます。

10.5.1 Middlewareの仕組み

「10.2  ウェブプログラミングの基本 」でも紹介しましたが、Goの Handler インタフェースは ServeHTTP メソッドをもちます。 ServeHTTP が呼び出されたときは HandlerFunc 型の func(ResponseWriter, *Request)f として呼び出します。

func (f HandlerFunc) ServeHTTP(w ResponseWriter, r *Request) {
    f(w, r)
}

ServeHTTPHandlerFunc 型の f を呼び出す仕組みを応用すると、ハンドラーとして定義されている f を処理する前(あるいは後)に実行したい処理を実装できます。このアプリケーションハンドラーに対して共通の処理を行う実装パターンが Middleware です。ロギングを行うMiddlewareについて見ていきましょう。

以下は localhost:8888/health にリクエストされたときに OK と出力するハンドラーです。 ...

Get 実用 Go言語 ―システム開発の現場で知っておきたいアドバイス now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.

Don’t leave empty-handed

Get Mark Richards’s Software Architecture Patterns ebook to better understand how to design components—and how they should interact.

It’s yours, free.

Get it now
Cover of Software Architecture Patterns

Check it out now on O’Reilly

Dive in for free with a 10-day trial of the O’Reilly learning platform—then explore all the other resources our members count on to build skills and solve problems every day.

Start your free trial Become a member now