gin框架学习笔记
官网review
- gin 是用go编写的web框架,由于httprputer(基于radix树路由)速度快了40倍,支持中间件,路由组处理,json等多方式验证,内置了json/xml/html等渲染,是一个易于使用的go 框架
- 如果是用常量,比如http.statusOk impport “net/http”
- gin使用默认的encoding/json作为默认的json包,但是可以通过其他标签构建改变他 (jsoniter: https://github.com/json-iterator/go)
Replace(性能更棒)
import "encoding/json"
json.Marshal(&data)
with
import jsoniter "github.com/json-iterator/go"
var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Marshal(&data)
Replace
import "encoding/json"
json.Unmarshal(input, &data)
with
import jsoniter "github.com/json-iterator/go"
var json = jsoniter.ConfigCompatibleWithStandardLibrary
json.Unmarshal(input, &data)
4.gin默认开启msgPack渲染功能,关闭这个功能通过建立指定nomsgpack标签
go build -tags=nomsgpack .
5.参数
// path
name := c.Param("name")
// query
firstname := c.DefaultQuery("firstname", "Guest")
lastname := c.Query("lastname")
// body
// Content-Type: application/x-www-form-urlencoded
message := c.PostForm("message")
6.中间件
// 默认创建一个没有任何中间件的路由器
r := gin . New ()
r.Use(gin.Logger())
- 模型绑定和验证
将请求body绑定请求类型,支持绑定,json,xml,yaml和
Gin 使用go-playground/validator/v10进行验证(https://github.com/go-playground/validator)
__NOTE: __ 需要绑定相应的标签在所有的字段上,如果想要绑定的话
gin tingeing2种设置方式去绑定(一定要绑定和应该要绑定) - 一定要绑定
方法:Bind, BindJSON, BindXML, BindQuery, BindYAML, BindHeader
行为: 如没有绑定将导致请求中指,并且使用c.AbortWithError(400, err).SetType(ErrorTypeBind) - 应该要绑定
方法: ShouldBind, ShouldBindJSON, ShouldBindXML, ShouldBindQuery, ShouldBindYAML, ShouldBindHeader
行为:这些方法ShouldBindWith在后台使用。如果存在绑定错误,则返回错误,开发人员有责任适当地处理请求和错误。
// 默认创建一个没有任何中间件的路由器
type Login struct {
User string `form:"user" json:"user" xml:"user" binding:"required"`
Password string `form:"password" json:"password" xml:"password" binding:"required"`
}
func main() {
router := gin.Default()
// Example for binding JSON ({"user": "manu", "password": "123"})
router.POST("/loginJSON", func(c *gin.Context) {
var json Login
if err := c.ShouldBindJSON(&json); err != nil {
c.JSON(http.StatusBadRequest, gin.H{
"error": err.Error()})
return
}
if json.User != "manu" || json.Password != "123" {
c.JSON(http.StatusUnauthorized, gin.H{
"status": "unauthorized"})
return
}
c.JSON(http.StatusOK, gin.H{
"status": "you are logged in"