net/http パッケージを使用することで、基本的な HTTP サーバーを簡単に記述できます。
|

package main
|
|
import (
"fmt"
"net/http"
)
|
net/http サーバーの基本的な概念は ハンドラー です。ハンドラーは http.Handler インターフェースを実装するオブジェクトです。ハンドラーを記述する一般的な方法は、適切なシグネチャを持つ関数に http.HandlerFunc アダプターを使用することです。
|
func hello(w http.ResponseWriter, req *http.Request) {
|
ハンドラーとして機能する関数は、引数として http.ResponseWriter と http.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)
}
|