コース一覧
    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分

    サーバーを立てる

    標準ライブラリだけで立つ

    Go

    package main
    
    import "net/http"
    
    func main() {
    	http.HandleFunc("/health", func(w http.ResponseWriter, r *http.Request) {
    		w.Write([]byte("ok"))
    	})
    	http.ListenAndServe(":8080", nil)
    }

    これだけで HTTP サーバーが動きます。何も追加でインストールしていません。 net/http は Go に最初から入っています。

    Node.js で Express を入れ、設定を書いてから始めたのと比べると、出発点が違います。Go では標準ライブラリだけで本番のサーバーを書くことも珍しくありません。

    2つの登場人物

    Go

    func(w http.ResponseWriter, r *http.Request)

    この形が、Go のハンドラです。

    プレーンテキスト

    w   応答を書く先。ここに書いたものが相手に届く
    r   届いたリクエスト。パスやメソッドや本文が入っている

    r にポインタが付いているのは、リクエストが大きいのでコピーを避けるためです。第6章のポインタレシーバと同じ理由です。

    応答を書く

    Go

    w.Write([]byte("ok"))

    Write はバイト列を受け取ります。文字列をそのままは渡せないので、[]byte(...) で変換します。第2章でやった明示的な型変換です。

    ステータスコードを指定するときは、書く前に呼びます。

    Go

    w.WriteHeader(404)
    w.Write([]byte("not found"))

    順番が逆だと効きません。Write を先に呼んだ時点で 200 が確定してしまいます。第8章で 404 を返すときに、必ず引っかかる場所です。

    このコースでの確かめ方

    実際にサーバーを起動すると、止めるまでプログラムが終わりません。採点ができないので、このコースでは httptest を使います。

    Go

    import "net/http/httptest"
    
    req := httptest.NewRequest("GET", "/health", nil)
    rec := httptest.NewRecorder()
    handler(rec, req)
    // rec に応答が記録されている

    偽のリクエストを作り、偽の記録係に応答を書かせます。サーバーを起動せずにハンドラだけを試せるので、テストの定番です。実務でもこの形で書きます。

    記録された内容はこう取り出します。

    Go

    res := rec.Result()
    res.StatusCode          // 200
    body, _ := io.ReadAll(res.Body)
    string(body)            // ok

    要件

    1. healthHandler が本文に ok を書く
    2. ステータスコードは 200(明示しなければ 200 になる)
    3. callHealth は ステータス 本文 の形を返す

    ヒント

    `healthHandler` の中に `w.Write([]byte("ok"))` の1行を書きます

    文字列をそのまま `w.Write("ok")` と渡すとコンパイルエラーになります。`[]byte(...)` で変換してください

    ステータスコードを書かなければ、自動的に 200 になります

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

    関連レッスン

    • ハンドラ関数

      ResponseWriterとRequestを受け取る関数を書き、/healthを実装できるようになります。

    • JSONを返す

      構造体タグを付けてJSONに変換し、Itemをきれいなキー名で返せるようになります。

    • ルーティング

      パスとメソッドで処理を分け、複数のエンドポイントを1つのサーバーに置けるようになります。

    • 一覧API

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

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

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

    • 標準ライブラリPythonに同梱の公式モジュール群
    • HTTPWeb の通信プロトコル、HTTPS は TLS で暗号化したもの
    • サーバークライアント(ブラウザなど)がリクエストを送り、サーバーがレスポンスを返す。
    • Node.jsJavaScript をサーバ側で動かすランタイム
    • リクエストWeb 通信の基本単位、ブラウザの問い合わせとサーバーの返答
    • 型変換あるデータ型を別の型に変換すること。
    • ステータスコード200/201/404 など結果を示す3桁の数値
    • テストバグを見つける工程
    main.go
    エディタを読み込んでいます

    メモ

    サーバーを立てる

    ⌘S で保存