ホームページ > バックエンド開発 > Golang > ジンリクエストプロセスのソースコード解析

ジンリクエストプロセスのソースコード解析

リリース: 2023-08-04 17:26:13
転載
1091 人が閲覧しました

標準ライブラリの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##から登録した関数を実行します。 # メソッド
  • Gin のコンテキスト ソース コード

    登録された関数を実行する前に、

    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.ResponseWriterOthers を定義しました。一部のメソッドは、開発を容易にするために日常的に使用するためのパッケージです。

    Context の Bind クラス メソッドの分析

    ジンリクエストプロセスのソースコード解析

    ソース コードでは、合計 が確認できます。バインディングはこれらをサポートします。 ;実装はデシリアライズです。詳細については 1 つずつ説明しません。

    重要な点は、bind が完了した後に、実際に使用される validate メソッドがあるということです github.com/go-playground/validator /v10データを検証するためのライブラリとして。

    ジンリクエストプロセスのソースコード解析

    そして、初期化には遅延読み込みを使用します。つまり、遅延読み込みを使用しない場合、オブジェクトは初期化されません。

    ジンリクエストプロセスのソースコード解析

    データを検証する開発プロセスについては、validator[1] の詳細な使用方法を参照してください。

    ginmode.go ファイルには、いくつかの動作のコントロールがあります。たとえば、DisableBindValidation によりデータ検証をオフにできます。これは、サービスのシャットダウンが開始される前にこのメソッドを呼び出します。

    ジンリクエストプロセスのソースコード解析

    ginS フォルダー

    このフォルダーは、デフォルトの内部グローバル gin.Engine オブジェクトを定義します。

    ジンリクエストプロセスのソースコード解析
    #また、遅延読み込みを使用して初期化されます。

    ジンリクエストプロセスのソースコード解析
    したがって、グローバル

    gin.Engine を使用したい場合は、このパッケージを使用できるため、独自のグローバルを保存する必要はありませんgin.エンジンオブジェクト。

以上がジンリクエストプロセスのソースコード解析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
gin
ソース:Golang菜鸟
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート