Gin框架学习day02

HTTP请求及Handle

GET请求

GET(路由路径,Handle):路由路径就是请求资源的路径,比如说下面这个例子,路由路径是localhost:8080/index,那么GET的第一个参数就是“index”,Handler就是一个处理函数,指的是服务器收到GET请求后,要做的动作。
GET函数将Handle处理函数与路由路径进行了绑定,这样,当用户访问GET中指定的路由路径时,将会调用Handle处理函数。

package main
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func someGet(c *gin.Context) {
	c.AsciiJSON(http.StatusOK, gin.H{
		"message": "someGet",
	})
}
func main() {
	r := gin.Default()        //默认的路由引擎
	
	r.GET("index", someGet)
	r.Run(":8080")
}

运行结果如下:
在这里插入图片描述

POST请求

POST函数也是两个参数,和GET一样,然后和GET一样,测试一下:

func somePost(c *gin.Context) {
	c.AsciiJSON(http.StatusOK, gin.H{
		"message": "somePost",
	})
	c.Writer.WriteString("this is somePost()")
}
func main() {
	r := gin.Default()        //默认的路由引擎
	
	r.GET("index", someGet)
	r.POST("somePost", somePost)
	r.Run(":8080")
}

问题就在于如果还像GET请求一样,直接浏览器输入“localhost:8080/somePost”的话,会404,因为浏览器会把这个URL当GET请求发送,为了方便和更加专业,还是下载了个postman,直接使用postman发送POST请求,结果如下:
在这里插入图片描述
在这里插入图片描述
多么优雅啊。。。。。。

带请求参数的GET和POST

Get请求:
c.Query(“key”) (.var会自动填充前面)
c.DefaultQuery(“key”, “xxoo”) 没有key会给一个默认值(这里默认值设为xxoo)
示例代码:

func getKey(c *gin.Context){
	s:=c.Query("name") 
	ss:=c.DefaultQuery("age", "18")
	c.String(http.StatusOK, "this is getKey() 获取到name=%s, age=%s", s, ss)
}

Post请求:
c.PostForm()
c.DefaultPostForm()
示例代码:

func getPost(c *gin.Context){
	s:=c.PostForm("name") 
	ss:=c.DefaultPostForm("age", "18")
	c.String(http.StatusOK, "this is getPost() 获取到name=%s, age=%s", s, ss)
}

结果:
在这里插入图片描述
在这里插入图片描述

RestFul风格路径参数:
使用c.Param(“key”)方法
e.GET(“/hello/:username”, testPathParam)
e.GET(“/hello/:username”, testPathParam) 可多个
示例代码:

func getParam(c *gin.Context){
	s:=c.Param("username") 
	ss:=c.Param("age")
	c.String(http.StatusOK, "this is getKey() 获取到name=%s, age=%s", s, ss)
}
func main() {
	r := gin.Default()        //默认的路由引擎
	r.GET("index", someGet)
	r.POST("somePost", somePost)
	r.GET("getKey", getKey)
	r.POST("getPost", getPost)
	r.GET("getParam/:username/:age", getParam)
	r.Run(":8080")
}

结果:
在这里插入图片描述
在这里插入图片描述

注:如果一个key有多个value,就在处理函数中使用c.PostFormArray(“key”)来获取这个有多个值的key

HTML渲染

Gin提供了一个方便的方法来返回HTML模板。使用HTML()方法将HTML模板渲染为响应。
使用LoadHTMLGlob来加载HTML模板(需要先在一个名为templates(名字也可以自己取)的目录下创建想要的HTML模板文件)。
HTML()函数有三个参数,第一个是http状态,第二个是html文件名,第三个是一个gin.H类型的数据结构,HTML()函数将html文件和gin.H(实际是一个Go map)数据结构关联起来,这个数据结构将作为模板的上下文传递给HTML模板中的变量。
比如说我给出的html模板是:

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        {{.}}
    </body>
</html>

其中,我使用双大括号{{}}来包含模板变量,'.'表示从上下文(Go map)中获取所有健的值,并将其替换为html模板中的对应位置。
main.go中的代码为:

func getPost(c *gin.Context) {
	s := c.PostForm("name")
	ss := c.DefaultPostForm("age", "18")
	c.HTML(http.StatusOK, "welcome.html", gin.H{
		"name": s,
		"age":  ss,
	})
	//c.String(http.StatusOK, "this is getPost() 获取到name=%s, age=%s", s, ss)
}
func main() {
	// 1. 创建路由引擎
	r := gin.Default()
	r.GET("index", someGet)
	r.POST("somePost", somePost)
	r.GET("getKey", getKey)
	r.POST("getPost", getPost)
	r.GET("getParam/:username/:age", getParam)
	r.LoadHTMLGlob("../templates/*")
	r.Run(":8080")
}
//当然,这个示例中游泳的只有r.POST()

最后运行结果为:
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值