美文网首页
gin笔记-入门例子

gin笔记-入门例子

作者: n_xy | 来源:发表于2021-03-20 18:29 被阅读0次

最简单的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") 

表单绑定

  • 单个form参数获取
name := c.PostForm("name")
message := c.PostForm("message")
  • map格式表单获取
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等。

相关文章

  • gin笔记-入门例子

    最简单的gin例子莫过于 其中方法第二个参数为func (c *gin.Content) 绑定 url路径参数绑定...

  • 01Gin源码解读

    简介 Gin 源码解读, 基于 v1.5.0 版本. 流程总览 官方文档上, 一个入门例子如下: 看上去非常简单...

  • gin路由例子1

    上篇文章说将请求加入树中是比较关键的,现在我们开始举第一个例子说明。 这个是最简单的例子,很多文章写gin的使用都...

  • gin快速入门

    gin框架快速入门 gin golang的一个微框架,对api友好,灵活,没有orm等, 其没有工具,需要手工创建...

  • gin的路由例子2

    上篇文章谈了gin添加一个路由/hello的过程,现在我们来添加第二个路由,第二个路由同样也是GET请求,路径可以...

  • gin的路由例子3

    这篇文章探索一下加一个参数路由是怎么加的(/hello/:name),我们拿上篇文章的例子继续,就是已经路由树是下...

  • Gin 笔记

    Context.Next()函数 从源码看,调用前是Before request,调用后代表After Request

  • Electron学习笔记(一)

    Electron学习笔记(Mac) 参考资料:官方指南中文版快速入门 官网例子Electron-quick-sta...

  • Electron学习笔记(一)

    Electron学习笔记(Mac) 参考资料:官方指南中文版快速入门 官网例子Electron-quick-sta...

  • Gin

    Iris、Gin、Beego Gin简介 https://gin-gonic.com/ Gin特点和特性 Gin环...

网友评论

      本文标题:gin笔记-入门例子

      本文链接:https://www.haomeiwen.com/subject/wlmwcltx.html