コース一覧
    Go実践:並行処理とWeb API
    ルーティング

    Go実践:並行処理とWeb API

    Goの並行処理とWeb API開発を組み合わせ、実践的なサービス構築へ進むコースです。

    1
    ゴルーチンと並行処理のさわり
    01. ゴルーチン15分
    02. チャネル20分
    03. 待ち合わせ20分
    04. 並行の落とし穴20分
    05. つくる: 並行集計20分
    06. 第7章クイズ10分
    2
    Web API(net/http)
    01. サーバーを立てる20分
    02. ハンドラ関数20分
    03. JSONを返す20分
    04. ルーティング20分
    05. 一覧API20分
    06. 詳細APIと40420分
    07. 出品API20分
    08. つくる: API主要部完成25分
    09. 第8章クイズ10分
    3
    総合制作
    01. 仕様互換を仕上げる25分
    02. Node版と差し替える25分
    03. 1バイナリでデプロイ25分
    04. 自由拡張25分
    05. 完成と次のステップ20分

    ルーティング

    パスごとに処理を分ける

    エンドポイントが増えると、ハンドラを1つずつ登録します。この登録を受け持つのが ServeMux です。

    Go

    mux := http.NewServeMux()
    mux.HandleFunc("/health", healthHandler)
    mux.HandleFunc("/items", itemsHandler)
    
    http.ListenAndServe(":8080", mux)

    mux は multiplexer(振り分け役)の略です。届いたリクエストのパスを見て、対応するハンドラへ渡します。

    前方一致に注意

    Go

    mux.HandleFunc("/items", itemsHandler)    // /items だけ
    mux.HandleFunc("/items/", itemsHandler)   // /items/ で始まる全部

    末尾のスラッシュで意味が変わります。 付けると前方一致になり、/items/1 も /items/abc/def も同じハンドラに届きます。

    詳細ページを作るときはこれを使います。/items/1 の 1 は自分で取り出します。

    メソッドつきで登録できる

    Go 1.22 から、メソッドとパスパラメータをまとめて書けるようになりました。

    Go

    mux.HandleFunc("GET /items", listHandler)
    mux.HandleFunc("POST /items", createHandler)
    mux.HandleFunc("GET /items/{id}", detailHandler)

    {id} の部分は、ハンドラの中で取り出せます。

    Go

    id := r.PathValue("id")

    これが入るまでは、パスを自分で切り分けるか、外部のライブラリを使うのが普通でした。標準ライブラリだけで書ける範囲が広がった変更です。

    このコースでは前者の書き方も扱います。 実務のコードにはどちらも残っているためです。

    登録されていないパス

    ServeMux は、どれにも当てはまらないパスに自動で 404 を返します。自分で書く必要はありません。

    プレーンテキスト

    GET /unknown → 404 page not found

    本文が page not found という決まった文言になります。JSON を返す API では、この既定の応答が混ざると扱いにくいので、後のレッスンで自分の形に揃えます。

    このコースでの確かめ方

    httptest では mux を直接呼べます。

    Go

    mux := http.NewServeMux()
    mux.HandleFunc("/health", healthHandler)
    
    req := httptest.NewRequest("GET", "/health", nil)
    rec := httptest.NewRecorder()
    mux.ServeHTTP(rec, req)

    ハンドラを直接呼ぶ代わりに mux.ServeHTTP を呼びます。振り分けまで含めて試せるので、パスの登録が正しいかも確かめられます。

    要件

    1. http.NewServeMux() で mux を作る
    2. /health /items /version の3つを登録する
    3. それぞれ ok items 1.0.0 を返す
    4. 登録していないパスは ServeMux に任せる

    ヒント

    `/health` の登録が手本になっています。同じ形で2つ足してください

    `mux.HandleFunc("/items", func(w http.ResponseWriter, r *http.Request) { ... })` の形です

    404 の処理は書かないでください。ServeMux が自動で返します

    生田 陸人
    監修生田 陸人
    ゆめさくエンジニア / 現役ソフトウェアエンジニア監修者プロフィールを見る →
    編集 ゆめさく編集部·公開 2026/08/10

    関連レッスン

    • 一覧API

      コレクションを返し、クエリパラメータで絞り込めるGET /itemsを作れるようになります。

    • 詳細APIと404

      パスからIDを取り出して1件返し、見つからないときに404を返せるようになります。

    • 出品API

      POSTのボディを読んで検証し、不正なら400を返して登録できるようになります。

    • つくる: API主要部完成

      第8章の知識でエンドポイント一式を実装し、fleama API仕様との突合を通せるようになります。

    このレッスンに出てくる用語

    意味があいまいなまま進んだ語は、ここから読み直せます。

    • 処理計算や代入を表す長方形
    • エンドポイント「この URL を叩くとこの機能が動く」入口の住所
    • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
    • メソッドクラスに属する関数
    • 標準ライブラリPythonに同梱の公式モジュール群
    • applicationJSON 本文を送るときの Content-Type
    • APIアプリ間でデータをやり取りする窓口
    main.go
    エディタを読み込んでいます

    メモ

    ルーティング

    ⌘S で保存