Go によるチュートリアル: HTTP サーバー

net/http パッケージを使用すれば、基本的な HTTP サーバーを簡単に作成できます。

package main
import (
    "fmt"
    "net/http"
)

net/http サーバーの基本的な概念はハンドラーです。ハンドラーは、http.Handler インターフェイスを実装するオブジェクトです。ハンドラーを作成する一般的な方法は、適切なシグネチャを備えた関数の http.HandlerFunc アダプターを使用することです。

func hello(w http.ResponseWriter, req *http.Request) {

ハンドラーとして機能する関数は、引数として http.ResponseWriterhttp.Request を取得します。レスポンスライターは、HTTP レスポンスに書き込むために使用されます。ここでは、単純なレスポンスは「hello\n」だけです。

    fmt.Fprintf(w, "hello\n")
}
func headers(w http.ResponseWriter, req *http.Request) {

このハンドラーは、すべての HTTP リクエストヘッダーを読み取ってレスポンス本文にエコーすることで、少し洗練された処理を行います。

    for name, headers := range req.Header {
        for _, h := range headers {
            fmt.Fprintf(w, "%v: %v\n", name, h)
        }
    }
}
func main() {

http.HandleFunc コンビニエンス関数を使用して、サーバールートにハンドラーを登録します。net/http パッケージ内のデフォルトルーターをセットアップし、関数を引数として受け取ります。

    http.HandleFunc("/hello", hello)
    http.HandleFunc("/headers", headers)

最後に、ポートとハンドラーを使用して ListenAndServe を呼び出します。nil は、セットアップしたばかりのデフォルトルーターを使用するよう指示します。

    http.ListenAndServe(":8090", nil)
}

バックグラウンドでサーバーを実行します。

$ go run http-servers.go &

/hello ルートにアクセスします。

$ curl localhost:8090/hello
hello

次の例: コンテキスト