gin笔记-入门例子

2021-03-20  本文已影响0人  n_xy

最简单的gin例子莫过于

        //获得一个缺省的全局路由
        router := gin.Default()

        router.GET("/someGet", getting)
    router.POST("/somePost", posting)
    router.PUT("/somePut", putting)
    router.DELETE("/someDelete", deleting)
    router.PATCH("/somePatch", patching)
    router.HEAD("/someHead", head)
    router.OPTIONS("/someOptions", options)
        //
        router.Run()

其中方法第二个参数为
func (c *gin.Content)

绑定

url路径参数绑定

1.”/user/:name
这种方式匹配路径 /user/xxx的一个参数xxx(类似spring 的{id}),不会匹配到 /user 和/user/
这种方式会匹配到/user/xxx,所以像/user/haha /user/haha/xixix之类的路径不能再定义了
可以定义多个pathvalue /user/:name/:password
获取方式为content.Parm("name").

  1. /user/:name/*action
    ‘*‘表示name之后的全部作为一个参数 映射到action

url查询绑定

url格式一般为/user?a=x&b=x
获取方法为

 c.DefaultQuery("firstname", "Guest")
 c.Query("lastname") 

表单绑定

name := c.PostForm("name")
message := c.PostForm("message")
ids := c.QueryMap("ids")
names := c.PostFormMap("names")

文件上传

xxx

路由

  1. 分组路由
v1 := router.Group("/v1")
{
  v1.GET()
  v1.POST()
}

定制自己的框架

首先
r :=gin.New()
然后像其中添加组件,比如```r.use(gin.Logger())``
还可添加自定义组件

r.use(gin.CustomRecovery(func(c *gin.Context, recovered interface{}) {
        if err, ok := recovered.(string); ok {
            c.String(http.StatusInternalServerError, fmt.Sprintf("error: %s", err))
        }
        c.AbortWithStatus(http.StatusInternalServerError)
    }))

上述是官方提供的宕机恢复组件示例.

modle绑定

gin支持从json,xml,yaml,以及查询参数来进行模型绑定(model bindding).需要在model的字段加上相应的tag才行。比如从json中绑定,json:"fieldname"

方法

gin提供了两类方法
1.必须绑定
这类绑定会认为model需要绑定的字段如果没有绑定上,就会出错,所以会终止请求返回400错误信息(自动写入header).
主要包括
Bind,BindJSON,BindXML,,BindQueryBindYAMLBindHeader
2.should方法
与上述方法相反,这类方法在绑定参数失败后会返回错误给开发人员处理。
3.bind
这个方法会根据header中的字段推测应该绑定的类型,如果不确定可以使用这个方法

一个model例子

type Login struct {
    User     string `form:"user" json:"user" xml:"user"  binding:"required"`
    Password string `form:"password" json:"password" xml:"password" binding:"required"`
}

绑定请求头参数

type testHeader struct {
    Rate   int    `header:"Rate"`
    Domain string `header:"Domain"`
}

if err := c.ShouldBindHeader(&h); err != nil {
            c.JSON(200, err)
        }

返回

json

1.c.JSON(http.StatusOK, msg)
最简单的方法,直接传入struct即可
类似可返回xml,yaml不过方式变为
c.YAML(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
2.SecureJSON(http.StatusOK, names)

names := []string{"lena", "austin", "foo"}

// Will output  :   while(1);["lena","austin","foo"]
c.SecureJSON(http.StatusOK, names)

默认前缀为while(1),r.SecureJsonPrefix(),可更改.

类似还有ascalljosn,purejson等。

上一篇 下一篇

猜你喜欢

热点阅读