gin教程02

原文链接:gin-gonic教程02

获取GET请求的参数

在上一篇文章中, 我们写了一个最简单的服务程序, 程序简单的返回了一个json数据, 而在业务开发中,我们经常会通过请求的一些参数来决定如何响应, 这就需要服务程序能够获取请求的参数下面我们来介绍一下如何利用gin.Context获取GET请求中的一些参数

main.go文件代码如下, 程序功能很简单, 就是获取请求中的param1param2参数, 然后利用这两个参数将其回显

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    router := gin.Default()

    router.GET("/JSONdata", func(c *gin.Context) {
        param1Value := c.Query("param1")  // 获取GET请求中的param1参数
        param2Value := c.Query("param2")  // 获取GET请求中的param2参数

        data := map[string]interface{} {
            "param1":param1Value,
            "param2":param2Value,
        }

        c.JSON(http.StatusOK, data) // 返回JSON对象
    })

    router.Run(":8080")
}
# 编译并且运行服务程序
[root@phoenix-VirtualBox] go build main.go
[root@phoenix-VirtualBox] ./main

# 新打开一个终端会话, 利用curl命令验证一下
[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/JSONdata?param1=xixi&param2=haha'
{"param1":"xixi","param2":"haha"}

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/JSONdata?param1=AAAA&param2=BBBB'
{"param1":"AAAA","param2":"BBBB"}

获取uri中的信息

有些时候, 我们可能会想要抓取uri中的某些特征信息来处理请求, 例如会有如下两条uri,/pages/dashboard/pages/userprofile, 我们想要动态抓取/pages/?后面(?)的值,在gin-gonic框架中同样可以做到这一点

1.匹配单个占位uri

main.go文件代码如下, 服务程序功能会抓取/pages/?, (?)位置的信息, 然后响应一个JSON对象数据

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    router := gin.Default()

    // 注意路由定义规则, :page代表是动态抓取的部分
    router.GET("/pages/:page", func (c *gin.Context) {
        pageValue := c.Param("page")

        data := map[string]interface{} {
            "page":pageValue,
        }

        c.JSON(http.StatusOK, data)
    })

    router.Run(":8080")
}
[root@phoenix-VirtualBox] go build main.go
[root@phoenix-VirtualBox] ./main

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/dashboard'
{"page":"dashboard"}

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/userprofile'
{"page":"userprofile"}
  • 针对router.GET(’/pages/:page’)只能动态匹配单个占位字符(以’/’)切割
    • 可以匹配
      • /pages/xxx
    • 不能匹配
      • /pages
      • /pages/
      • /pages/xxx/
      • /pages/xxx/yyy
      • /pages/xxx/yyy/…

2.匹配uri多个占位符

在上个例子当中, 我们只能匹配uri中的后一个占位符, 有些时候我们需要匹配某个uri后面的一长串后缀, 例如对于uri/pages/xxx/yyy/zzz来说, 我们想要抽取xxx/yyy/zzz, 在这种情况下gin-gonic依然提供了一个路由匹配方式来支持这种需求

main.go文件代码如下

package main

import (
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    router := gin.Default()

    // 定义路由匹配规则, *page为动态匹配多个占位字符串
    router.GET("/pages/*page", func(c *gin.Context) {
        pageValue := c.Param("page")

        data := map[string]interface{} {
            "page":pageValue,
        }

        c.JSON(http.StatusOK, data)
    })

    router.Run(":8080")
}
[root@phoenix-VirtualBox] go build main.go
[root@phoenix-VirtualBox] ./main

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/'
{"page":"/"}

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/xxx'
{"page":"/xxx"}

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/xxx/yyy'
{"page":"/xxx/yyy"}

[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/pages/xxx/yyy/zzz'
{"page":"/xxx/yyy/zzz"}
  • 针对router.GET(’/pages/*page’)可以动态匹配多个占位字符(以’/’)切割
    • 可以匹配
      • /pages/
      • /pages/xxx
      • /pages/xxx/
      • /pages/xxx/yyy
      • /pages/xxx/yyy/…
    • 不能匹配
      • /pages
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值