Golang net/httpメソッド忘備録
Golangのnet/httpパッケージのメソット名と引数と軽い説明を随時、記録していきます。
サーバー起動
http.ListenAndServe("", nil)
http.ListenAndServe(":8080", nil)
第1引数にはポート番号(string)を渡し
第2引数にはハンドラ(Handle型)を渡す
第1引数 を空に設定するとデフォルトでポート80が設定され、
第2引数は通常nilでデフォルトのDefaultServeMuxというハンドラが設定される。
ハンドラとハンドラ関数
ハンドラ
ハンドラとは、クライアントから送られてきたHTTPリクエストを受け付け、処理をする。
また、HTMLテンプレートエンジンを呼び出し、HTTPレスポンスに組み込んでクライアントに返送できるようにする
MVCパターンでいう、コントローラーとモデルの役割を果たす。
Go言語におけるハンドラはServeHTTPというメソッドを持つインターフェースのことである。
type Handler interface {
ServeHTTP(http.ResponseWriter, *http.Request)
}
全てServeHTTPのシグネチャ(関数やメソッドの名前、引数、データ型、返り値等の組み合わせ)を持つ。
※インターフェースは型のメソッドを集めた塊のイメージ
ハンドラ関数
ハンドラのように振る舞う関数のことであり、ハンドラと同じくServeHTTPのシグネチャを持つ。
単にハンドラを作成するのに便利な手段!
下記hello関数はHandlerFunc(hello)を通じてハンドラとしての振る舞いができるようになる。
HandlerFunc型にキャストするイメージが正しいのだろうか?
//ServeHTTPのシグネチャを持つhello関数
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello!")
}
HandlerFunc型に変換(ハンドラとして使える)
helloHandler := HandlerFunc(hello)
混乱のもと、HandleFuncとHandlerFunc
HandleFunc・・・ハンドラ関数をDefaultServerMuxに登録する
HandlerFunc・・・型の名前
まだ途中です!