HTTPサーバーの作成

Go(Golang)では、標準ライブラリの net/http パッケージを使って簡単にHTTPサーバーを作成できます。以下に、HTTPサーバー作成の基本的な構成から応用的な要素まで詳しく説明します。


1. 基本的なHTTPサーバーの構成

Goでは、http.ListenAndServe 関数を使ってサーバーを起動します。また、http.HandleFunc を使ってURLパスに対するハンドラーを登録します。

サンプルコード(最小限のHTTPサーバー):

go
package main import ( "fmt" "net/http" ) func helloHandler(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "Hello, World!") } func main() { http.HandleFunc("/", helloHandler) err := http.ListenAndServe(":8080", nil) if err != nil { fmt.Println("サーバー起動に失敗:", err) } }

解説:

  • http.HandleFunc("/", helloHandler) は、ルートパス(/)にアクセスがあったときに helloHandler を呼び出します。

  • http.ResponseWriter はレスポンスの書き込みに使い、*http.Request はリクエスト情報の読み取りに使います。

  • http.ListenAndServe(":8080", nil) はポート8080でHTTPサーバーを開始します。


2. マルチパス対応

複数のパスに異なるハンドラーを設定できます。

go
http.HandleFunc("/hello", helloHandler) http.HandleFunc("/goodbye", goodbyeHandler)

3. ハンドラーのカスタム実装(http.Handler インタフェース)

ハンドラーは http.Handler インタフェースを実装した構造体としても定義できます。

go
type MyHandler struct{} func (h MyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "これはMyHandlerからのレスポンスです") } func main() { handler := MyHandler{} http.ListenAndServe(":8080", handler) }

4. クエリパラメータやヘッダーの取得

go
func queryHandler(w http.ResponseWriter, r *http.Request) { name := r.URL.Query().Get("name") fmt.Fprintf(w, "こんにちは、%s さん", name) }

URLに ?name=Taro のようにパラメータを付けてアクセスします。


5. フォームデータやJSONの処理

go
// フォームデータの取得 r.ParseForm() username := r.FormValue("username") // JSONの読み取り type User struct { Name string `json:"name"` } var user User json.NewDecoder(r.Body).Decode(&user)

6. サーバーの構成オプション(タイムアウトやTLS)

http.Server 構造体を使って細かく設定できます。

go
srv := &http.Server{ Addr: ":8080", ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, Handler: nil, // デフォルトのマルチプレクサを使用 } srv.ListenAndServe()

7. TLS(HTTPS)対応

go
http.ListenAndServeTLS(":443", "cert.pem", "key.pem", nil)

8. 静的ファイルの配信

go
fs := http.FileServer(http.Dir("./static")) http.Handle("/static/", http.StripPrefix("/static/", fs))

これにより、./static フォルダのファイルが /static/ 以下でアクセス可能になります。


まとめ

GoのHTTPサーバーはシンプルながら強力で、次のような特徴があります。

  • net/http 標準ライブラリだけで構築可能

  • 複数のパス・ハンドラーの柔軟な定義

  • JSONやフォームデータの受け取りに対応

  • HTTPS、静的ファイル配信にも対応

  • 独自のミドルウェア設計も可能


必要であれば、ルーティングやミドルウェアを強化するために gorilla/mux や chi などの外部ライブラリを使うことも可能です。

生成日:2025/05/03