nakayama

nakayama blog page

Backend day2

Go言語でhttp通信をするために用いられ得る、net,httpの基本的な関数をまとめる事によって、goでのhttp通信の理解を深める。

参考資料 → https://journal.lampetty.net/entry/understanding-http-handler-in-go

  • http.ListenAndServe
  • http.Handler
  • http.HandleFUnc
  • http.ServeMux
  • http.ServeMux.Handle
  • http.ServeMux.HandleFinc
  • http.Handle

http.ListenAndServe

サーバーを稼働するもの。

  • 第一引数にTCPアドレス
  • 第二引数にhttp.Handler

仮に第二引数がnillの場合DefaultServeMuxがHandlerとして指定される。

を渡す。

http.Handler

ServeHTTP(ResponseWriter, *Request)というメソッドを定義しているinterface。

ServeHTTPメソッドはHTTPリクエストを受けてHTTPレスポンスを返す処理が記述されている。

http.ServeMux

  • 第一引数にHTTPリクエストのURL(パス)
  • 第二引数にServeHTTP

第一引数のパスにアクセスされると第二引数の関数が呼ばれる。

世に出し時にはあらかじめレシーバを設定する必要がある。

http.HandlerFunc

HandlerFunc 型にはあらかじめ、ServeHTTP(ResponseWriter, *http.Request)のシグニチャを定義しておき、HandlerFuncにキャストを行うことで、構造体を指定する事なく、http.Handlerを実装する事ができる。

http.ServeMux.HandleFunc

ServeMuxにはHandleメソッド以外にもHandleFuncというメソッドが定義されている。

第二引数にHandlerをキャストして、自身でHandleを呼び出す実装になっているので、わざわざhttp.HandlerFuncにキャストをせずに関数を呼び出せる。

http.HandleとDefaultServeMux

httpにDefaultServeMuxというグローバル変数定義されているので、http.Handleを呼び出すので、DefaultMux.Handleが呼び出される。つまり、登録されているURLに対しハンドラを返す。

http.HandleFuncも同様に定義されている。

http.handle

  • http.Handle はコンテンツを提供する(表示する) URL と、URL に対応する http.Handler を DefaultServeMux に登録する関数。

同じパッケージ内にある他のフォルダもまとめてビルド

go build

これまでで、簡単なWebサーバーを立てて、templateの内容を表示する事は出来た。次にチャットルームアプリの土台を構築していく。

  • クライアントとの接続の管理やメッセージのルーティングを受け持つ → room型
  • ある1つのクライアントへの接続を表す → client型

が登場人物として加わる。

他の言語でクラスを使って表現される所は、Goでは型(type)を使用する。

WebSocketを管理するために、サードパーティである、gorilla/websocketを使用する。