最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

gin自定義中間件解決requestBody不可重復讀問題(最新推薦)

 更新時間:2023年04月29日 08:40:44   作者:咸蛋solo粥  
這篇文章主要介紹了gin自定義中間件解決requestBody不可重復讀問題,本文通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

先直接上代碼

r := gin.Default()
	// 注冊中間件,使body可以重復讀取
	r.Use(func(context *gin.Context) {
		all, err := context.GetRawData() // 讀取body的內容
		if err != nil {
			log.Fatal(err)
		}
		// 重寫 GetBody 方法,以便后續(xù)的其他操作
		context.Request.GetBody = func() (io.ReadCloser, error) {
			context.Request.Body = io.NopCloser(bytes.NewBuffer(all))
			buffer := bytes.NewBuffer(all)
			closer := io.NopCloser(buffer)
			return closer, nil
		}
		body, _ := context.Request.GetBody()  // 每次調用GetBody方法,都會新生成一個io.ReadCloser,但是底層的byte數據,都是all變量緩存的。
		context.Request.Body = body
		context.Next()
	})

注意,上面的中間件,需要在第一個執(zhí)行。

分析

在gin中,context.Request.Body 是一個io.ReadCloser的接口,如下圖

查看io.ReadCloser接口定義

type ReadCloser interface {
	Reader
	Closer
}
type Reader interface {
	Read(p []byte) (n int, err error)
}
type Closer interface {
	Close() error
}

我們發(fā)現io.ReaderCloser接口的本質就是Read(p []byte) (n int, err error) 和 Close() error 的組合。

所以我們只需要自己編寫實現Read(p []byte) (n int, err error) 和 Close() error 這兩個方法的結構體即可賦值給context.Request.Body,在我們自己實現的方法中實現可重復讀取即可達到我們的目的。

到此這篇關于gin自定義中間件解決requestBody不可重復讀問題的文章就介紹到這了,更多相關requestBody不可重復讀內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 淺析Go中函數的健壯性,panic異常處理和defer機制

    淺析Go中函數的健壯性,panic異常處理和defer機制

    這篇文章主要為大家詳細介紹了Go中函數的健壯性,panic異常處理和defer機制的相關知識,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2023-10-10
  • Golang開發(fā)Go依賴管理工具dep安裝驗證實現過程

    Golang開發(fā)Go依賴管理工具dep安裝驗證實現過程

    這篇文章主要為大家介紹了Golang開發(fā)Go依賴管理工具dep安裝驗證及初始化一系列實現過程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步
    2021-11-11
  • go語言使用第三方包 json化結構體操作示例

    go語言使用第三方包 json化結構體操作示例

    這篇文章主要介紹了go語言使用第三方包 json化結構體操作,結合實例形式分析了Go語言ffjson包git安裝及結構體轉json字符串相關操作技巧,需要的朋友可以參考下
    2019-06-06
  • Go語言模型:string的底層數據結構與高效操作詳解

    Go語言模型:string的底層數據結構與高效操作詳解

    這篇文章主要介紹了Go語言模型:string的底層數據結構與高效操作詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • golang配制高性能sql.DB的使用

    golang配制高性能sql.DB的使用

    本文主要講述SetMaxOpenConns(),?SetMaxIdleConns()?和?SetConnMaxLifetime()方法,?您可以使用它們來配置sql.DB的行為并改變其性能,感興趣的可以了解一下
    2021-12-12
  • Go中的fuzz模糊測試使用實戰(zhàn)詳解

    Go中的fuzz模糊測試使用實戰(zhàn)詳解

    這篇文章主要為大家介紹了Go中的fuzz模糊測試使用實戰(zhàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-12-12
  • Golang拾遺之指針和接口的使用詳解

    Golang拾遺之指針和接口的使用詳解

    拾遺主要是收集和golang相關的瑣碎知識,這篇文章主要是為大家整理了Golang中指針和接口的使用方法,文中的示例代碼講解詳細,需要的可以參考一下
    2023-02-02
  • Golang實現事務型內存數據庫的方法詳解

    Golang實現事務型內存數據庫的方法詳解

    內存數據庫經我們經常用到,例如Redis,那么如何從零實現一個內存數據庫呢,本文旨在介紹如何使用Golang編寫一個KV內存數據庫MossDB
    2023-03-03
  • 基于Go語言實現分金幣游戲

    基于Go語言實現分金幣游戲

    這篇文章主要為大家詳細介紹了如何利用Go語言實現分金幣游戲,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-03-03
  • Go?編程復雜數據類型?Map

    Go?編程復雜數據類型?Map

    這篇文章主要介紹了Go編程復雜數據類型Map,Go中的Map是一組無需的K-V類型的數據,與Python中的字典Dict和Java中的HashMap結構類似。未被初始化的Map為nil
    2022-08-08

最新評論

鹿泉市| 皋兰县| 礼泉县| 弥勒县| 府谷县| 溧阳市| 正镶白旗| 合阳县| 河津市| 仙居县| 诸暨市| 松阳县| 静乐县| 武强县| 元朗区| 勃利县| 岳阳市| 固镇县| 衡水市| 九龙县| 宝山区| 北川| 江永县| 九江市| 报价| 清远市| 苏尼特右旗| 徐闻县| 江都市| 水富县| 东安县| 涞源县| 元谋县| 阳城县| 都江堰市| 南安市| 满城县| 西林县| 左云县| 灌云县| 楚雄市|