原文链接:gin-gonic教程02
获取GET请求的参数
在上一篇文章中, 我们写了一个最简单的服务程序, 程序简单的返回了一个json数据, 而在业务开发中,我们经常会通过请求的一些参数来决定如何响应, 这就需要服务程序能够获取请求的参数下面我们来介绍一下如何利用gin.Context
获取GET请求
中的一些参数
main.go
文件代码如下, 程序功能很简单, 就是获取请求中的param1
和param2
参数, 然后利用这两个参数将其回显
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¶m2=haha'
{
"param1":"xixi","param2":"haha"}
[root@phoenix-VirtualBox] curl 'http://127.0.0.1:8080/JSONdata?param1=AAAA¶m2=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
今天的文章gin教程02分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/33912.html