標準ライブラリのhttpサービス
Handler接口就可以注册到标准库的http server中。然后就会启动一个web应用。http请求流程当发生一个http请求的时候,在内部处理的流程是下面这样的:开启一个协程进行请求处理在conn.serve中调用serverHandler.ServeHTTP 函数如果有自己注册的Handle,那么就会调用注册的Handle的ServeHTTP 方法。这里还要注意的2个点如果自己在启动的时候没有注册自己的Handle,那么会采用标准库默认的ServeMux,全局名称为DefaultServeMux。如果请求URI为*并且请求Method为OPTIONS,那么Handle行为会被改成默认的globalOptionsHandler。上述分析的源码为GO 1.18.3。Gin 处理请求的流程前面我们看到只要注册自己的Handle接口到标准库就可以接管请求的处理;那么我们来看一下gin的Handle接口实现。在gin中,handleHTTPRequest就是匹配路径和对应handle 的处理函数。流程大致是这样:获取请求的路径在trees中找到对应的methodTree
methodTree中匹配对应路径的处理函数handle
Next##から登録した関数を実行します。 # メソッド
ServeHTTP# で sync が使用されていることがわかりました。 ## メソッド .Pool
、実際には gin.Context
の再利用です。
// Context is the most important part of gin. It allows us to pass variables between middleware, // manage the flow, validate the JSON of a request and render a JSON response for example. type Context struct { writermem responseWriter Request *http.Request Writer ResponseWriter Params Params handlers HandlersChain index int8 fullPath string engine *Engine params *Params skippedNodes *[]skippedNode // This mutex protects Keys map. mu sync.RWMutex ... }
公式の
req と resp
が保存されます。 コンテキスト
で。そして、gin
は、公式の http.ResponseWriter
関数に拡張機能を追加しました。つまり、インターフェース gin.ResponseWriter
Others を定義しました。一部のメソッドは、開発を容易にするために日常的に使用するためのパッケージです。
ソース コードでは、合計 が確認できます。バインディングはこれらをサポートします。
;実装はデシリアライズです。詳細については 1 つずつ説明しません。
重要な点は、bind
が完了した後に、実際に使用される validate
メソッドがあるということです github.com/go-playground/validator /v10
データを検証するためのライブラリとして。
そして、初期化には遅延読み込みを使用します。つまり、遅延読み込みを使用しない場合、オブジェクトは初期化されません。
データを検証する開発プロセスについては、validator[1] の詳細な使用方法を参照してください。
gin の
mode.go ファイルには、いくつかの動作のコントロールがあります。たとえば、
DisableBindValidation によりデータ検証をオフにできます。これは、サービスのシャットダウンが開始される前にこのメソッドを呼び出します。
このフォルダーは、デフォルトの内部グローバル gin.Engine
オブジェクトを定義します。
gin.Engine を使用したい場合は、このパッケージを使用できるため、独自のグローバルを保存する必要はありません
gin.エンジンオブジェクト。
以上がジンリクエストプロセスのソースコード解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。