小编Eri*_*rik的帖子

如何包装路由处理函数 gin.HandlerFunc

鉴于:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.POST("/status", handler)
    r.Run(":8080")
}

func handler(c *gin.Context) {

    var status string
    if err := c.ShouldBindJSON(&status); err != nil {
        c.JSON(503, gin.H{"status": "failed"})
    }
    c.JSON(200, gin.H{"status": "OK"})
}
Run Code Online (Sandbox Code Playgroud)

处理程序函数返回错误消息取决于它应该做什么,因为我有很多带有重复错误处理代码的函数来产生错误响应。

如何包装此处理程序以外部化错误处理和响应格式。例如:

package main

import (
    "github.com/gin-gonic/gin"
)

func main() {
    r := gin.Default()
    r.POST("/status", wrapper(handler_status))
    r.GET("/health", wrapper(handler_health))
    r.Run(":8080")
}

func wrapper(f func(c *gin.Context) (string, error)) gin.HandlerFunc {

    status, err := f()

    if err != nil {
        c.JSON(503, gin.H{"status": err}) …
Run Code Online (Sandbox Code Playgroud)

go go-gin

4
推荐指数
1
解决办法
1万
查看次数

标签 统计

go ×1

go-gin ×1