GIN是一個快速的Go Web框架,具有輕量級,HTTP路由,中間件等特性。它使用例子來減少樣板代碼。基本上,每個例子都是一個完全的,可以運行的Web應用程序。
在其中一個例子中,我們看到了一個c.WriteJSON()函數。這個函數將一個結構化數據,如Map或Slice,轉換為JSON字符串并寫入響應主體。但是,如果我們想要更多的定制,比如設置響應頭或錯誤處理,我們就需要對c.WriteJSON()函數進行封裝。
// 封裝c.JSON()函數,設置響應頭和錯誤處理 func JSON(c *gin.Context, status int, obj interface{}) { // 設置響應頭 c.Header("Content-Type", "application/json; charset=utf-8") // 返回JSON數據 if err := c.JSON(status, obj); err != nil { // 錯誤處理 c.AbortWithStatusJSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) } }
在上面的代碼中,我們創建了一個名為JSON()的函數來封裝c.JSON()方法。該函數使用傳遞的參數設置響應頭并返回JSON數據。如果有錯誤,它將以JSON格式返回500 Internal Server Error。
要使用此函數在您的代碼中,請像這樣調用:
// 從handler函數中調用我們之前編寫的函數 func SomeHandler(c *gin.Context) { if ... { obj := map[string]interface{}{"name": "gin", "ver": "1.0"} JSON(c, http.StatusOK, obj) } else { JSON(c, http.StatusBadRequest, gin.H{"error": "參數錯誤"}) } }
這里我們在處理器函數SomeHandler()中調用JSON()函數,而不是使用原始的c.WriteJSON()函數。這樣,我們就可以獲得更好的性能和更好的錯誤處理。
上一篇c json是否有效