深刻理解gin framework(一)

gin框架

  • 衆多的golang web框架中,gin是一個比較輕量級的框架,不像beego那樣,還有orm模塊。接口設計,運行速度方面,gin都算是比較讓人滿意的。

web框架的頂層設計

  • 每一個語言都有本身框架的特色,golang的話,由於有官方的標準庫,標準庫的質量是比較可靠的,因此絕大多數框架都是基於標準庫,面向實際應用場景,將底層的細節進一步地抽象,達到減小開發時間,提高代碼質量的目的。
  • 因此,在頂層分析框架設計的時候,須要明確如今web框架主要的功能,以及golang標準包提供了什麼工具。
  • 需求:RESTful接口。目前主流的後端設計都是圍繞接口展開的,而目前主流的接口設計範式就是RESTful。也就是說,框架的設計目標應該知足如下幾點:git

    1. 便捷的路由分組
    2. 快速調用http方法 get,post,delete,put,patch,head,options等進行資源管理
    3. 良好的併發性能
    4. 解析URL參數或request body便捷
    5. 須要對JSON有良好的支持
  • golang的http標準包有哪些組件,組件之間的關聯又是如何?http標準包是開發web框架必不可少的原材料:github

    1. 在http包的源碼中,有幾個重要的部件:其中struct 有 Server,Conn。interface有Handler。分別對應服務器對象,connection對象,以及路由器。
    2. http標準包的編程邏輯:須要實現Handler接口的ServeHTTP方法,至關於新建一個路由規則,當server啓動,創建http鏈接以後,就能夠按照定義的路由規則進行處理了。

gin是如何整合http包的

  1. 定義一個engine,實現ServeHTTP方法,這時,就能夠將engine 做爲Handler傳給http包的ListenAndServe函數。從http標準包的角度來看,gin就是實現了一個功能強大的Handler。
  2. 在ServeHTTP方法中,集中由函數handleHTTPRequest處理請求,這裏會按照http方法,path進行分發。

gin是如何設計接口的

  1. 先看一個調用gin的示例:

    clipboard.png

  2. 其中gin.Default返回Engine對象,gin.Context則幾乎包含了http請求中的幾乎全部信息,這個Context也是gin框架設計的核心結構。源碼以下圖:

    clipboard.png

  3. 實際使用gin框架時,業務邏輯的處理幾乎就是圍繞Context對象展開的。
  4. 而路由部分所有由engine對象承擔,engine對象組合了RouterGroup對象,而RouterGroup對象則實現了IRoutes接口

    clipboard.png

  5. 因此,在使用gin框架時,核心的部分就是生成一個engine對象,而後註冊路由規則,最後就是藉助Context對象處理須要響應的http數據。詳細的例子能夠參照如下連接: gin example
相關文章
相關標籤/搜索