Go中gin框架的*gin.Context參數常見實用方法

梗概:

*gin.Context是處理HTTP請求的核心。ctx代表"context"(上下文),它包含了處理請求所需的所有信息和方法,例如請求數據、響應構建器、路由參數等。

基本的格式:

func SomeHandler(ctx *gin.Context) {// 使用ctx來處理請求和構建響應
}

常見的使用:

1. 讀取查詢參數

從請求中讀取查詢字符串參數。

func ReadQueryParams(ctx *gin.Context) {value := ctx.Query("someParam") // 獲取查詢參數ctx.JSON(http.StatusOK, gin.H{"someParam": value, // 回顯參數})
}

2. 讀取POST表單數據

對于POST請求中發送的表單數據的訪問

func ReadPostForm(ctx *gin.Context) {value := ctx.PostForm("somePostParam") // 獲取POST表單參數ctx.JSON(http.StatusOK, gin.H{"somePostParam": value,})
}

3. 讀取JSON請求體

如果請求有JSON體,將其綁定到一個結構體。

type RequestBody struct {Message string `json:"message"`
}func ReadJSONBody(ctx *gin.Context) {var body RequestBodyif err := ctx.BindJSON(&body); err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Invalid JSON"}) // 綁定JSON失敗return}ctx.JSON(http.StatusOK, gin.H{"message": body.Message,})
}

4. 寫入JSON響應

向客戶端寫入JSON響應。

func WriteJSONResponse(ctx *gin.Context) {ctx.JSON(http.StatusOK, gin.H{"status": "success","data": "some data",})
}

5. 流式響應

對于大型響應,您可以向客戶端流式傳輸數據。

func StreamResponse(ctx *gin.Context) {for i := 0; i < 10; i++ {ctx.SSEvent("message", gin.H{"data": "Streaming " + strconv.Itoa(i)})time.Sleep(1 * time.Second)}
}

6. 訪問路由參數

可以使用Param方法訪問路由參數。

func RouteParameter(ctx *gin.Context) {productID := ctx.Param("id") // 獲取路由參數ctx.JSON(http.StatusOK, gin.H{"product_id": productID,})
}

7. 設置Cookies

您可以設置和獲取cookies。

func CookieExample(ctx *gin.Context) {ctx.SetCookie("username", "user1", 3600, "/", "localhost", false, true) // 設置cookieusername := ctx.GetCookie("username") // 獲取cookiectx.JSON(http.StatusOK, gin.H{"cookie_username": username,})
}

8. 錯誤處理

您可以處理錯誤并返回適當的響應。

func ErrorHandling(ctx *gin.Context) {if someCondition {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Bad request"}) // 發送錯誤響應} else {ctx.JSON(http.StatusOK, gin.H{"message": "Success"}) // 發送成功響應}
}

9. 文件上傳

也支持處理文件上傳。

func FileUpload(ctx *gin.Context) {file, err := ctx.FormFile("file") // 獲取上傳的文件if err != nil {ctx.JSON(http.StatusBadRequest, gin.H{"error": "Error uploading file"}) // 文件上傳失敗return}ctx.SaveUploadedFile(file, "path/to/save/"+file.Filename) // 保存文件ctx.JSON(http.StatusOK, gin.H{"message": "File uploaded successfully"}) // 文件上傳成功
}

10. 使用中間件

*gin.Context經常在中間件中使用,以執行請求處理前后的動作。

func MyMiddleware(c *gin.Context) {c.Set("myKey", "myValue") // 在中間件中設置值c.Next()                   // 調用下一個中間件或處理器
}func main() {router := gin.Default()router.Use(MyMiddleware) // 使用自定義中間件router.GET("/somepath", func(c *gin.Context) {value := c.Get("myKey") // 從中間件獲取值c.JSON(http.StatusOK, gin.H{"myKey": value})})router.Run()
}

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

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

相關文章

空間計量模型及 Stata 具體操作步驟

目錄 一、引言 二、空間計量模型理論原理 空間自回歸模型&#xff08;SAR&#xff09;&#xff1a; 空間誤差模型&#xff08;SEM&#xff09;&#xff1a;&#xff0c; 空間杜賓模型&#xff08;SDM&#xff09;&#xff1a; 三、實證模型構建 四、數據準備 五、Stata …

14-56 劍和詩人30 - IaC、PaC 和 OaC 在云成功中的作用

介紹 隨著各大企業在 2024 年加速采用云計算&#xff0c;基礎設施即代碼 (IaC)、策略即代碼 (PaC) 和優化即代碼 (OaC) 已成為成功實現云遷移、IT 現代化和業務轉型的關鍵功能。 讓我在云計劃的背景下全面了解這些代碼功能的當前狀態。我們將研究現代云基礎設施趨勢、IaC、Pa…

【電路筆記】-C類放大器

C類放大器 文章目錄 C類放大器1、概述2、C類放大介紹3、C類放大器的功能4、C 類放大器的效率5、C類放大器的應用:倍頻器6、總結1、概述 盡管存在差異,但我們在之前有關 A 類、B 類和 AB 類放大器的文章中已經看到,這三類放大器是線性或部分線性的,因為它們在放大過程中再現…

Collection 和 Collections 的區別與用法

Collection 和 Collections 的區別與用法 1、Collection 接口1.1 主要特點1.2 常見方法 2、 Collections 工具類2.1 主要特點2.2 常見方法 3、示例代碼3.1 使用 Collection 接口3.2 使用 Collections 工具類 4、總結 &#x1f496;The Begin&#x1f496;點點關注&#xff0c;收…

STM32學習歷程(day6)

EXTI外部中斷使用教程 首先先看下EXTI的框圖 看這個框圖就能知道要先初始化GPIO外設 那么和前面一樣 1、先RCC使能時鐘 2、配置GPIO 選擇端口為輸入模式&#xff0c; 3、配置AFIO&#xff0c;選擇我們用的GPIO連接到后面的EXTI 4、配置EXTI&#xff0c;選擇邊沿觸發方式…

LVS實驗

LVS實驗 nginx1 RS1 192.168.11.137 nginx2 RS2 192.168.11.138 test4 調度器 ens33 192.168.11.135 ens36 12.0.0.1 test2 客戶端 12.0.0.10 一、test4 配置兩張網卡地址信息 [roottest4 network-scripts]# cat ifcfg-ens33 TYPEEthernet BOOTPROTOstatic DEFROUTEyes DEVIC…

詳解平面DP(上)

前言 其實平面DP和正常的dp沒有什么本質上的區別&#xff0c;只不過是在二維的面上進行DP&#xff0c;而且&#xff0c;客觀的說&#xff0c;其實和遞推沒有什么區別&#xff0c;不要把他想的太難了 講解 本蒻雞思前想后&#xff0c;好像關于平面DP的理論知識好像沒有什么&a…

前后端分離系統

前后端分離是一種現代軟件架構模式&#xff0c;特別適用于Web應用開發&#xff0c;它強調將用戶界面&#xff08;前端&#xff09;與服務器端應用邏輯&#xff08;后端&#xff09;相分離。兩者通過API接口進行數據交互。這種架構模式的主要優勢在于提高開發效率、維護性和可擴…

Git命令常規操作

目錄 常用操作示意圖 文件的狀態變化周期 1. 創建文件 2. 修改原有文件 3. 刪除原有文件 沒有添加到暫存區的數據直接 rm 刪除即可&#xff1a; 對于添加到暫存區的數據 文件或目錄&#xff1a; 4. 重命名暫存區數據 5. 查看歷史記錄 6. 還原歷史數據 恢復過程的原…

最新深度技術Win7精簡版系統:免費下載!

在Win7電腦操作中&#xff0c;用戶想要給電腦安裝上深度技術Win7精簡版系統&#xff0c;但不知道去哪里才能找到該系統版本&#xff1f;接下來系統之家小編給大家帶來了深度技術Win7系統精簡版本的下載地址&#xff0c;方便大家點擊下載安裝。系統安裝步驟已簡化&#xff0c;新…

定位和分析解決std::thread創建失敗的問題和解決方法(mmap虛擬地址耗盡)

文章目錄 引言問題描述和分析監控shell腳本shell腳本解釋 問題根源追溯解決方案一&#xff1a;增大mmap區域解決方案二&#xff1a;優化線程棧空間解決方案三&#xff1a;引入線程池參考文章 引言 在高并發和長周期運行的環境中&#xff0c;頻繁創建std::thread線程可能導致mm…

設計模式8-橋模式

設計模式8-Bridge 橋模式 由來與目的模式定義結構代碼推導1. 類和接口的定義2. 平臺實現3. 業務抽象4. 使用示例總結1. 類數量過多&#xff0c;復雜度高2. 代碼重復3. 不符合單一職責原則4. 缺乏擴展性改進后的設計1. 抽象和實現分離&#xff08;橋接模式&#xff09;2. 抽象類…

學習XDMA—20240709

概覽&#xff1a; 在內部&#xff0c;子系統可以配置為實現多達8個獨立的物理DMA引擎(最多4個H2C和4個C2H)。這些DMA引擎可以映射到單獨的AXI4Stream接口&#xff0c;也可以將共享的AXI4內存映射(MM)接口映射到用戶應用程序。在axis4 MM接口上&#xff0c;PCI Express的DMA/橋接…

智能警衛:Conda包依賴的自動監控之道

智能警衛&#xff1a;Conda包依賴的自動監控之道 引言 在復雜的軟件開發項目中&#xff0c;依賴管理是確保項目健康運行的關鍵環節。Conda作為Python和其他科學計算語言的強大包管理器&#xff0c;提供了依賴監控功能&#xff0c;幫助用戶自動化和簡化依賴項的監控過程。本文…

軟考高級第四版備考--第15天(建設團隊)Develop Team

定義&#xff1a;提高工作能力&#xff0c;促進團隊成員互動&#xff0c;改善團隊整體氛圍以提高項目績效的過程 作用&#xff1a;改進團隊協作、增強人際關系技能、激勵員工、減少摩擦以提升整體項目績效 說明&#xff1a;高效團隊行為&#xff1a; 使用開放與有效的溝通&a…

簡述 JS 中對象的創建和拷貝

在 JavaScript 中&#xff0c;對象是一種非常重要且靈活的數據結構&#xff0c;用于存儲多個值&#xff08;屬性&#xff09;和方法&#xff08;函數&#xff09; 對象的創建和拷貝是日常開發中經常涉及的操作&#xff0c;對于業務邏輯的準確實現有著重要的作用 本文將簡要概…

linux查看目錄下的文件夾命令,find 查找某個目錄,但是不包括這個目錄本身?

linux查看目錄下的文件夾命令&#xff0c;find 查找某個目錄&#xff0c;但是不包括這個目錄本身&#xff1f; Linux中查看目錄下的文件夾的命令是使用ls命令。ls命令用于列出指定目錄中的文件和文件夾。通過不同的選項可以實現顯示詳細信息、按照不同的排序方式以及使用不同的…

Profibus轉ModbusTCP網關模塊實現Profibus_DP向ModbusTCP轉換

Profibus和ModbusTCP是工業控制自動化常用的二種通信協議。Profibus是一種串口通信協議&#xff0c;它提供了迅速靠譜的數據傳輸和各種拓撲結構&#xff0c;如總線和星型構造。Profibus可以和感應器、執行器、PLC等各類設備進行通信。 ModbusTCP是一種基于TCP/IP協議的通信協議…

一次零基礎 自“信息收集“到“權限維持“的滲透測試全程詳細記錄

一、滲透總流程 1.確定目標&#xff1a; 在本靶場中&#xff0c;確定目標就是使用各種掃描工具進行ip掃描&#xff0c;確定目標ip。 2.信息收集&#xff1a; 比如平常挖洞使用fofa&#xff0c;天眼查&#xff0c;ip域名等進行查&#xff0c;在我們這個靶場中比如使用Wappalyz…

基于網絡編碼的 tcp 變種-tcp/nc

tcp/nc 是指 “tcp with network coding”&#xff0c;是一種結合了網絡編碼技術的 tcp 變種&#xff0c;網上資源很少&#xff0c;我也不準備多介紹&#xff0c;只介紹它的核心。 傳統 tcp 在演進過程中一直搞不定效率問題&#xff0c;網絡帶寬在增長&#xff0c;cpu 卻沒有變…