Gin 框架笔记 | 青训营
这是我参与「第六届青训营 -后端场」笔记创作活动的的第2篇笔记
restful api
简单来说,REST的含义就是客户端与Web服务器之间进行交互的时候,使用HTTP协议中的4个请求方法代表不同的动作
GET用来获取资源
POST用来新建资源
PUT用来更新资源
DELETE用来删除资源
gin html渲染
首先创建一个html文件在template下面,然后通过{{.key}}的方式获取到后端传过来的json数据,并且在后端中使用LoadHTMLGlog()来渲染html模板
获取参数
Query参数
当/name=admin&pwd=123456,gin中name := c.Query("name"),pwd := c.Query("pwd")
form参数
username := c.PostForm("username") //对应h5表单中的name字段
Path参数
当请求/user/admin,url这样写
/user/:username,获取方式:/user/admin
路由
形如:r.GET("/get",func(c *gin.Context) {}),
匹配所有请求方法的Any方法,r.Any("/test",func(c *gin.Context) {})
为没有配置处理函数的路由添加处理程序,默认情况下它返回404代码,以下为没有匹配到路由的请求返回的是templates/404.html页面
r.NoRoute(func(c *gin.Context) {
c.HTML(http.StatusNotFound,"templates/404.html",nil)
})
路由组
可以将拥有共同前缀URL的路由划分为一个路由组
user := r.Group("/user")
user.GET("/index", func(c *gin.Context) {})
user.POST("/login", func(c *gin.Context) {})
等同/user/index,/user/login
中间件
处理请求过程中加入钩子函数,说白了,就是将r.get里面的匿名函数写main外面,做一个封装,这样代码更简洁,可读性更高
间件中使用Goroutine
当在中间件或 handler 中启动新的 Goroutine 时,不能使用原始的上下文,必须使用只读副本
// 创建在 goroutine 中使用的副本
tmp := c.Copy()
go func() {
// 用 time.Sleep() 模拟一个长任务。
time.Sleep(5 * time.Second)
// 请注意您使用的是复制的上下文 "tmp",这一点很重要
log.Println("Done! in path " + tmp.Request.URL.Path)
}()
})
参数绑定
可以使用ShouldBind,它能够基于请求自动提取JSON,Form表单,Query等类型的值,并把值绑定到指定的结构体对象
文件上传
单个
获取:file, err := c.FormFile("f1")
上传:
log.Println(file.Filename)
dst := fmt.Sprintf("C:/tmp/%s", file.Filename)
// 上传文件到指定的目录
c.SaveUploadedFile(file, dst)
多个
获取:
form, _ := c.MultipartForm()
files := form.File["file"]
<br>上传
for index, file := range files {
log.Println(file.Filename)
dst := fmt.Sprintf("C:/tmp/%s_%d", file.Filename, index)
// 上传文件到指定的目录
c.SaveUploadedFile(file, dst)
}
重定向
// 指定重定向的URL
c.Request.URL.Path = "/test2"
r.HandleContext(c)
设置和获取Cookie
获取:c.Cookie("gin_cookie")
设置:
cookie = "NotSet"
c.SetCookie("gin_cookie", "test", 3600, "/", "localhost", false, true)
学习建议
关于这个gin的基本使用,同学们除了看视频之外还可以通过看菜鸟教程和b站去学习,菜鸟比较基础,可以在看完菜鸟教程之后去看b站,b站里面看一些实战项目,这样就可熟练起来