GIN框架入门
Gin 是一个用Go编写的 Web 框架。
安装
在终端中输入下面的命令可以装
go get -u github.com/gin-gonic/gin
如果出现下载超时问题可以通过配用户环境变量
GOPROXY=https://goproxy.io || https://goproxy.cn
安装后只需要在文件中添加导入
import "github.com/gin-gonic/gin"
快速入门
package main
import "github.com/gin-gonic/gin"
func main() {
// 创建一个服务
r := gin.Default()
//
r.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // 监听并在 0.0.0.0:8080 上启动服务
}
//此时执行代码之后,在浏览器中可以输入http://localhost:8080/ping
//浏览器会返回信息
http方法和路由参数
package main
func main{
router := gin.Default()
//http请求
router.GET("/Get", getting)
router.POST("/Post", posting)
router.PUT("/Put", putting)
router.DELETE("/Delete", deleting)
router.PATCH("/Patch", patching)
router.HEAD("/Head", head)
router.OPTIONS("/Options", options)
// 此 handler 将匹配 /user/123 但不会匹配 /user/ 或者 /user
router.GET("/user/:name", func(c *gin.Context) {
name := c.Param("name")
c.String(http.StatusOK, "%s", name) //http.StatusOK 状态码
})
// 此 handler 将匹配 /user/123/ 和 /user/123/send
// 如果没有其他路由匹配 /user/john,它将重定向到 /user/john/
router.GET("/user/:name/*action", func(c *gin.Context) {
name := c.Param("name")
action := c.Param("action")
message := name + " is " + action
c.String(http.StatusOK, message)
})
router.Run(":8081") // 不写的话默认是8080,也可以更改
}
路由组和重定向
v1 := router.Group("/user")
{
v1.POST("/login", login)
v1.POST("/submit", submit)
v1.GET("/read", read)
}
v2 := router.Group("/user1")
{
v2.POST("/login", login)
v2.POST("/submit", submit)
v2.POST("/read", read)
}
//http重定向
r.GET("/read", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, "http://www.google.com/")
})
r.POST("/test", func(c *gin.Context) {
c.Redirect(http.StatusFound, "/login")
})
//路由重定向,使用 HandleContext
r.GET("/test", func(c *gin.Context) {
c.Request.URL.Path = "/test2"
r.HandleContext(c)
})
r.GET("/test2", func(c *gin.Context) {
c.JSON(200, gin.H{"hello": "world"})
})
HTTP重定向,也称为网页跳转,是在HTTP协议下工作的,它根据HTTP请求和响应的状态来决定是否跳转,以及跳转到哪个页面。常见的HTTP状态码有301、302、303、307、308等。HTTP重定向的优点是它能够实现网页内容的更新,但缺点是跳转过程中可能会暴露用户的当前浏览路径。
路由重定向是Django框架提供的一种重定向方式,它是基于URL路由配置来实现的。路由重定向将用户从当前URL自动重定向到另一个URL,而不需要用户手动操作浏览器地址栏。
总结就是http重定向就是页面跳转来实现网页内容的更新,路由重定向的优点是能够实现无缝的用户体验。
中间件
func Logger() gin.HandlerFunc {
return func(c *gin.Context) {
t := time.Now()
// 设置 example 变量
c.Set("example", "12345")
// 请求前
c.Next()
// 请求后
latency := time.Since(t)
log.Print(latency)
// 获取发送的 status
status := c.Writer.Status()
log.Println(status)
}
}
func main() {
r := gin.New()
r.Use(Logger())
r.GET("/test", func(c *gin.Context) {
example := c.MustGet("example").(string)
// 打印:"12345"
log.Println(example)
})
// 监听并在 0.0.0.0:8080 上启动服务
r.Run(":8080")
}
在 main() 函数中,创建了一个新的 Gin 实例(r := gin.New()),并使用 Logger() 函数作为中间件。这意味着每次有请求到达时,都会执行 Logger() 函数中的内容
HTML 渲染
使用 LoadHTMLGlob() 或者 LoadHTMLFiles()
func main() {
router := gin.Default()
//LoadHTMLGlob() 函数使用路径匹配的方式来加载 HTML 文件
router.LoadHTMLGlob("templates/**/*")
router.GET("/posts/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "posts/index.tmpl", gin.H{
"title": "Posts",
})
})
//LoadHTMLFiles() 函数则是用来加载单个 HTML 文件的
router.GET("/users/index", func(c *gin.Context) {
c.HTML(http.StatusOK, "users/index.tmpl", gin.H{
"title": "Users",
})
})
router.Run(":8080")
}