GIN中間件

? ? ? ? 感覺中間件是gin中挺重要的內容,就拿出來單獨講講吧!


什么是中間件?

Gin框架允許開發者在處理請求的過程中,加入用戶自己的 HandlerFunc 函數。

它適合處理一些公共的業務邏輯,比如登錄認證、權限校驗、數據分頁、記錄日志、耗時統計等。

也就是我們這里說的中間件。

必須是一個gin.HandlerFunc類型,即func(* Context)類型。

// HandlerFunc defines the handler used by gin middleware as return value.
type HandlerFunc func(*Context)

自定義中間件

定義中間件:

func myHandler() gin.HandlerFunc {return func(c *gin.Context) {startTime := time.Now()c.Next()endTime := time.Now()duration := endTime.Sub(startTime)fmt.Println(duration)}
}

中間件的使用:

注冊全局路由,所有的請求都會經過這里來處理,打印出訪問時間。

router.Use(myHandler())

為某個路由單獨注冊中間件

	router.GET("/example", myHandler(), func(c *gin.Context) {c.JSON(http.StatusOK, gin.H{})})

為路由組注冊中間件

func Group(router *gin.Engine) {userGroup := router.Group("/user")userGroup.Use(MyHandler()){ //習慣性一對`{}`包裹同組的路由,這只是為了看著清晰,你用不用`{}`包裹功能上沒什么區別userGroup.GET("/1", func(c *gin.Context) {}) //   /user/1userGroup.GET("/2", func(c *gin.Context) {}) //   /user/2userGroup.GET("/3", func(c *gin.Context) {}) //   /user/3}
}

中間件的使用順序

在 Gin 中,中間件是按照注冊的順序依次執行的。如果中間件 A 注冊在 B 之前,那么 A 會在 B 之前執行;調用c.next() 后,將執行下一個中間件,如果 c.Abort()?被調用,后續中間件將不會執行。

gin默認中間鍵

gin.Default()默認使用了LoggerRecovery中間件,其中:

  • Logger中間件將日志寫入gin.DefaultWriter,即使配置了GIN_MODE=release

  • Recovery中間件會recover任何panic。如果有panic的話,會寫入500響應碼。

如果不想使用上面兩個默認的中間件,可以使用gin.New()新建一個沒有任何默認中間件的路由。

?


? ? ? ? 本來想著挺重要的,就單獨寫了,學了一遍之后發現很簡單,可能是因為我之前學過吧,之前那遍挺蒙的,就覺得難了,回頭再看其實不難。?這篇文章比我寫的好寫的全,十分推薦:【Golang】——Gin 框架中間件詳解:從基礎到實戰_gin 中間件-CSDN博客

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/63315.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/63315.shtml
英文地址,請注明出處:http://en.pswp.cn/web/63315.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SLM510A系列——24V,15到150mA單通道可調電流線性恒流LED驅動芯片

SLM510A 系列產品是單通道、高精度、可調電流線性恒流源的 LED 驅動芯片,在各種 LED 照明產品中非常簡單易用。其在寬電壓輸入范圍內,能保證極高的輸出電流精度,從而在大面積的光源照明中,都能讓 LED 照明亮度保持均勻一致。 由于…

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測

回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測 目錄 回歸預測 | MATLAB實現SVM-Adaboost集成學習結合支持向量機多輸入單輸出回歸預測基本介紹程序設計基本介紹 SVM-Adaboost集成學習是一種將支持向量機(SVM)與AdaBoost算法相結合的集成學習…

【潛意識Java】深度解讀JavaWeb開發在Java學習中的重要性

目錄 為什么Java Web開發如此重要? 1. 現代開發的核心技能 2. 增強系統設計與架構思維 3. 實戰經驗積累 Java Web開發的關鍵技術棧 案例:構建一個簡單的Java Web應用 1. 創建數據庫 2. 創建Java類 3. 創建數據庫連接工具類 4. 創建DAO類 5. 創…

如何在 .NET Core 中輕松實現異步編程并提升性能

目錄 初識異步編程 與多線程關系 異步編程操作 初識異步編程 異步編程:是指在執行某些任務時程序可以在等待某個操作完成的過程中繼續執行其他任務,而不是阻塞當前線程,這在處理I/O密集型操作(如文件讀取、數據庫查詢、網絡請求等)時尤為重…

麒麟操作系統服務架構保姆級教程(二)ssh遠程連接

如果你想擁有你從未擁有過的東西,那么你必須去做你從未做過的事情 作為一名成熟運維架構師,我們需要管理的服務器會達到幾十臺,上百臺,上千臺,甚至是上萬臺服務器,而且咱們的服務器還不一定都在一個機房&am…

159.等差數列的劃分

class Solution {public int numberOfArithmeticSlices(int[] nums) {int lenums.length;if(le<3){return 0;}int arith0,res0,count0;//arith是差的大小,res是結果,count計算等差數量for(int i1;i<le;i){if(nums[i]-nums[i-1]arith){count;if(count>2){rescount-1;}}…

RabbitMQ消息隊列的筆記

Rabbit與Java相結合 引入依賴 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId> </dependency> 在配置文件中編寫關于rabbitmq的配置 rabbitmq:host: 192.168.190.132 /…

請求三方http工具

請求三方接口工具封裝 實現邏輯&#xff1a; 發起請求&#xff0c;輸入基本請求信息&#xff1a;請求地址&#xff0c;請求類型&#xff0c;請求參數&#xff0c;是否需要認證工具自動為需要添加認證的請求添加認證&#xff0c;如果發現token快要過期或返回的錯誤編碼為定義的…

HP服務器開啟性能模式

ENERGY PERF BIAS CFG 模式指的是通過特定配置(通常是 BIOS 或操作系統中的設置)來控制處理器的能源性能偏置(Energy Performance Bias, EPB)。EPB 是一種機制,允許用戶或系統管理員在性能和功耗之間進行權衡。不同的設置可以影響系統的響應速度、能效等。 ENERGY PERF B…

調用釘釘接口發送消息

調用釘釘接口發送消息 通過創建釘釘開放平臺創建H5小程序&#xff0c;通過該小程序可以實現向企業內的釘釘用戶發送消息&#xff08;消息是以工作通知的形式發送&#xff09; 1、目前僅支持發送文本消息&#xff0c;相同內容的文本只能成功發送一次&#xff0c;但是接口返回發…

純css 實現呼吸燈效果

開始效果 呼吸效果 實現代碼 <div class"container"><div class"breathing-light"></div> </div><style>html,body {height: 100%;background-color: white;}.container {padding: 100px;}.container .breathing-light {wi…

進程通信方式---共享映射區(無血緣關系用的)

5.共享映射區&#xff08;無血緣關系用的&#xff09; 文章目錄 5.共享映射區&#xff08;無血緣關系用的&#xff09;1.概述2.mmap&&munmap函數3.mmap注意事項4.mmap實現進程通信父子進程練習 無血緣關系 5.mmap匿名映射區 1.概述 原理&#xff1a;共享映射區是將文件…

《云原生安全攻防》-- K8s安全框架:認證、鑒權與準入控制

從本節課程開始&#xff0c;我們將來介紹K8s安全框架&#xff0c;這是保障K8s集群安全比較關鍵的安全機制。接下來&#xff0c;讓我們一起來探索K8s安全框架的運行機制。 在這個課程中&#xff0c;我們將學習以下內容&#xff1a; K8s安全框架&#xff1a;由認證、鑒權和準入控…

day08-別名-重定向-去重排序等

1.重復用touch命令創建同一份文件&#xff0c;會修改文件的時間戳。 alias命令&#xff1a; 別名 查看已有別名&#xff1a;alias [rootoldboy ~]# alias alias cpcp -i alias egrepegrep --colorauto alias fgrepfgrep --colorauto alias grepgrep --colorauto alias l.ls…

Qt WORD/PDF(四)使用 QAxObject 對 Word 替換(QWidget)

關于QT Widget 其它文章請點擊這里: QT Widget 國際站點 GitHub: https://github.com/chenchuhan 國內站點 Gitee : https://gitee.com/chuck_chee 姊妹篇: Qt WORD/PDF&#xff08;一&#xff09;使用 QtPdfium庫實現 PDF 操作 Qt WORD/PDF&#xff08;二…

設計一個基礎JWT的多開發語言分布式電商系統

在設計一個分布式電商系統時&#xff0c;保證系統的可擴展性、性能以及跨語言的兼容性是至關重要的。隨著微服務架構的流行&#xff0c;越來越多的電商系統需要在多個服務間共享信息&#xff0c;并且保證服務的安全性。在這樣的場景下&#xff0c;JSON Web Token&#xff08;JW…

實踐分享 | 公共數據金融應用的理論探索與實踐研究—以人民幣銀行結算賬戶數據應用為例

摘要:公共數據具有高權威性、高準確性、高價值性以及高應用性的特點,實現公共數據的金融應用對更好服務實體經濟、防控金融風險和提升金融服務水平具有重要現實意義。本文從理論探索與實踐研究兩個層面分析了公共數據金融應用的具體問題,一方面探索性的給出了公共數據金融應…

Node的學習以及學習通過Node書寫接口并簡單操作數據庫

Node的學習 Node的基礎上述是關于Node的一些基礎&#xff0c;總結的還行&#xff1b; 利用Node書寫接口并操作數據庫 1. 初始化項目 創建新的項目文件夾&#xff0c;并初始化 package.json mkdir my-backend cd my-backend npm init -y2. 安裝必要的依賴 安裝Express.js&…

計算機視覺中的特征提取算法

摘要&#xff1a; 本文聚焦于計算機視覺中的特征提取算法&#xff0c;深入探討尺度不變特征變換&#xff08;SIFT&#xff09;算法。詳細闡述 SIFT 算法的原理&#xff0c;包括尺度空間構建、關鍵點檢測、方向分配與特征描述子生成等核心步驟。通過 C#、Python 和 C 三種編程語…

MySQL 主從復制與 Binlog 深度解析

目錄 1. Binlog的工作原理與配置2. 主從復制的設置與故障排除3. 數據一致性與同步延遲的處理 小結 MySQL的binlog&#xff08;二進制日志&#xff09;和主從復制是實現數據備份、容災、負載均衡以及數據同步的重要機制。在高可用性架構和分布式數據庫設計中&#xff0c;binlog同…