mko*_*iva 9

Abort

错误检查是Go 的一个特性,你只需要像其他人一样去做。

但是,您可以在一定程度上简化错误检查。例如,一种解决方案可能是这样的:

func Error(c *gin.Context, err error) bool {
    if err != nil {
        c.Error(err)
        c.AbortWithStatusJSON(200, gin.H{"status": false, "message": err.Error()})
        return true // signal that there was an error and the caller should return
    }
    return false // no error, can continue
}

然后你的处理程序看起来像这样:

func MyHandler(c *gin.Context) {
    f, err := os.Create(file)
    if Error(c, err) {
        return // exit
    }

    // continue
}

另一种方法,在我看来更惯用的方法是将处理程序更改为具有错误返回参数,然后使用一个包装器来接受这些错误返回处理程序并返回一个有效的 gin 处理程序,然后这个返回的 gin 处理程序可以处理您认为合适的错误值。

// error returning handler
func MyHandler(c *gin.Context) error {
    f, err := os.Create(file)
    if err != nil {
        return err // exit
    }

    // do other stuff...

    return nil // all good
}

// function that turns the error-returning handler into a valid gin handler
func GinHandler(myhandler func(c *gin.Context) error) (ginhandler func(c *gin.Context)) {
    return func(c *gin.Context) {
        if err := myhandler(c); err != nil {
            c.Error(err)
            c.AbortWithStatusJSON(200, gin.H{"status": false, "message": err.Error()})
        }
    }
}

// and you would register the MyHandler like so...
router := gin.Default()
router.GET("/foobar", GinHandler(MyHandler))