这是我参与「第五届青训营 」笔记创作活动的第6天
前言
我们都知道大多数编程语言都有框架的支持来简化开发,像spring全家桶、vue等。go也不例外有着许多开源的优秀框架,gin便是go的web框架,这里我们主要了解和学习gin框架的简单使用。
简单了解go的web框架
go是一门快速成长的编程语言,标准库提供的net/http已经比较完善,对http协议实现较好,因此基于该库实现一个框架不是难事,go的生态链便出现了很多优秀的开源框架。
- gin:go实现的web微框架,简单优雅,api友好,以更好的性能实现类似Martini框架的api。
- beego:一个快速开发go应用的http框架,可以快速开发api、web、服务端等各种应用,是一个restful的框架。
- iris:一个快速简单、功能齐全有效的web框架,完备的mcv支持(被称为全宇宙最快的goweb框架)。
gin的安装及使用
安装
gin框架的安装十分简单,在终端或者控制台运行以下命令即可安装:
go get -u github.com/gin-gonic/gin
在使用的时候导包:
import "github.com/gin-gonic/gin"
一个简单的HelloWorld
//创建服务
ginServer := gin.Default()
//添加一个接口
ginServer.GET("/hello", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "Hello"})
})
//启动并添加服务端口
ginServer.Run(":8081")
restfulapi
上面有提到beego是一个restful的框架,gin也是支持restful风格的。
get接口简单例子:
ginServer.GET("/get", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "get"})
})
post接口简单例子:
ginServer.POST("/post", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "post"})
put接口简单例子:
ginServer.PUT("/put", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "put"})
delete接口简单例子:
ginServer.DELETE("/delete", func(context *gin.Context) {
context.JSON(200, gin.H{"msg": "delete"})
响应页面
gin也是支持响应一个页面的,并可以在返回一个页面的同时返回后端的数据
//创建服务
ginServer := gin.Default()
//加载静态资源
ginServer.LoadHTMLGlob("static/*")//此处路径一般为相对路径
ginServer.GET("getindex", func(context *gin.Context) {
context.HTML(http.StatusOK, "index.html", gin.H{//这里要给一个页面的路径
"msg": "后端数据" })
})
ginServer.Run(":8081")
获取请求参数
gin提供了很多获取请求参数的方法,十分的方便快捷。
获取请求路径?后面的参数(query参数)
ginServer.GET("/get", func(context *gin.Context) {
变量名 :=context.Query("路径?后的参数名")
})
获取路径上/后面的参数(param参数)
ginServer.GET("/get/:userid", func(context *gin.Context) {
userid :=context.Param("userid")
})
获取前端传给后端json格式的数据
ginServer.POST("/post", func(context *gin.Context) {
data,_ :=context.GetRawData()//这里接收到的data需要进行反序列化
})
获取表单数据
ginServer.POST("/post", func(context *gin.Context) {
userid :=context.PostForm("userid")
})
路由
重定向
ginServer.GET("/get", func(context *gin.Context) {
context.Redirect(http.StatusMovedPermanently,"要重定向的url")
})
404
ginServer.GET("/get", func(context *gin.Context) {
context.HTML(http.SattusNotFound,"404.html",nil)
})
路由组
此处就有点像主路径下面有多个子路径。
adminGroup :=ginnServer.Group("/admin")
{
aminGroup.GET("/add")
aminGroup.GET("/find")
}
自定义拦截器
此处需要传入一个gin的Handler并在此上实现自己的Handler。
// 自定义中间件 拦截器
func myHandler() gin.HandlerFunc {
return func(context *gin.Context) {
context.Set("key", "1")
//逻辑判断
context.Next() //放行
context.Abort() //拦截
}
}
小结
通过学习能够发现,gin可以简单快速的创建一个可以访问的web服务。当然仅仅是简单了解gin的使用远远不够,还有更多的地方值得探索。
参考
- 快速入门 | Gin Web Framework (gin-gonic.com)
- 【【狂神说】Gin框架一小时上手 | 快速转型GoWeb开发 | Go语言零基础教程-哔哩哔哩】 b23.tv/T2dKmhr