本文受了获取Get参数 · Gin中文文档 · 看云以及go的gin框架使用(四):get请求_美丽的泡沫-CSDN博客的启发
Get请求是8种http请求之一。其格式是
域名?参数名1=参数值1&参数名2=参数值2...............
使用DefaultQuery或者Query函数响应Get请求。
目录
不带通配符的响应:
r.GET("/obj", func(c *gin.Context) {
var name = c.DefaultQuery("filename", "teapot.obj")
c.Header("Content-Type", "text/plain; charset=utf-8")
c.Header("Content-Disposition", "inline;filename=\""+name+"\"")
content, _ := ioutil.ReadFile(name)
c.String(200, string(content))
//fmt.Println(string(content))
})
DefaultQuery(变量1,变量2)返回值就是Get传来的参数值。变量1是请求的“=”等号左边的参数名。假如不带参数,则默认返回变量2.
Query函数则只能响应带参数的情况。
使用通配符:的响应:
示例见go gin - How to define a go-gin route with an id in the middle - Stack Overflow
假如url字符串被若干/符号分割为若干段,而其中一段是个动态的字段(或者说是可变的字段),比如用户ID,则使用:通配符可以把这个字段提取出来。
router := gin.Default()
router.GET("/user/:userid/status", func(c *gin.Context) {
userid := c.Param("userid")
message := "userid is " + userid
c.String(http.StatusOK, message)
fmt.Println(message)
})
在上面的示例中,假如url含有如下内容:
/user/jackson/status
则c.Param("userid")将返回 jackson
使用通配符*的响应:
假如url字符串被若干/符号分割为若干段,而最后一段是个动态的字段(或者说是可变的字段),则通配符*可以将这个字段提取出来:Golang - Gin router 基本介紹
r.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
c.JSON(200, gin.H{
"message": name,
"action": action,
})
})
action将代表/user/:name/后面的所有字符串(即使后面还有/,/也会计入c.Param("action")的返回值)。
假如我通过下面的指令访问服务器:
curl -X GET h80/user/adam/testhejklasjkdlfasdf/adsfasdf
则返回值为:
{"action":"/testhejklasjkdlfasdf/adsfasdf","message":"adam"}