大家在用gin的写服务的时候多多少少会遇到一些需要频繁处理响应的格式、错误、翻译的问题,这里给大家推荐一个非常干净高效的格式化工具。
**GINFMT**: [github地址](https://github.com/sleagon/ginfmt)
这玩意很简单,代码不超过200行,没有用任何反射,除了gin本身没有以来任何标准库的包,理论上可以兼容任何版本的gin。
它实现的功能如下:
1. 所有的响应都是格式化的code/message/data。
2. 所有的错误都按级别打印好了,可以自定义日志工具,可以自定义日志级别,所有错误具备错误栈。
3. 所有的错误都支持I18N翻译,支持自定义翻译工具。
4. 性能好,不以来反射和任何三方库。
下面是一个可以直接跑的例子:
```go
package main
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
"github.com/sleagon/ginfmt"
"github.com/sleagon/ginfmt/errfmt"
)
var (
BadRequest = errfmt.Register(http.StatusBadRequest, 10001, "Params is invalid")
)
func main() {
ginfmt.Init(nil, nil)
r := gin.Default()
r.Use(ginfmt.MW())
r.GET("/bad", func(c *gin.Context) {
ginfmt.Error(c, BadRequest.Gen())
})
r.GET("/ping", func(c *gin.Context) {
ginfmt.Data(c, "pong")
})
r.GET("/bad_payload", func(c *gin.Context) {
// do sth
err := fmt.Errorf("this is not a valid phone num %w", BadRequest.Gen())
ginfmt.DataError(c, gin.H{"phone": "invalid", "email": "valid"}, err)
})
r.Run() // listen and serve on 0.0.0.0:8080
}
```
有疑问加站长微信联系(非本文作者))