Golang Gin框架的路由使用
发表于|更新于
|字数总计:1k|阅读时长:4分钟|阅读量:|
在 Gin 框架中,路由是指 Web 应用程序中的 URL。Gin 框架中的路由定义了客户端请求的 URL 和处理该请求的函数之间的映射关系。Gin 框架支持多种类型的路由,包括 GET、POST、PUT、DELETE 等,可以根据需要进行选择。
路由基础
下面是一个使用 Gin 框架的路由的示例:
首先,导入 Gin 包,然后,创建一个 Gin 实例
1 2
| import "github.com/gin-gonic/gin" r := gin.Default()
|
接着,定义路由:
1 2 3
| r.GET("/", func(c *gin.Context) { c.String(http.StatusOK, "Hello, Gin!") })
|
这里使用 r.GET()
定义了一个 GET 请求路由,当客户端请求根路径时,返回一个字符串 “Hello, Gin!”。
除了 GET 请求之外,Gin 框架还支持其他类型的请求,例如,定义一个 POST 请求路由:
1 2 3 4 5
| r.POST("/user", func(c *gin.Context) { c.JSON(200, gin.H{ "message": "Hello, Gin!", }) })
|
这里使用 r.POST()
定义了一个 POST 请求路由,当客户端向 /user
路径发起 POST 请求时,执行回调函数处理该请求。
定义 PUT、DELETE 等其他类型的请求如下:
1 2 3 4 5 6 7 8 9 10 11
| router := gin.Default()
// PUT请求 router.PUT("/hello", func(c *gin.Context) { c.String(http.StatusOK, "Hello World") })
// DELETE请求 router.DELETE("/hello", func(c *gin.Context) { c.String(http.StatusOK, "Hello World") })
|
可以看到,Gin 框架的路由定义非常简单,只需要指定请求类型、URL 和回调函数即可。
Gin 框架还支持更复杂的路由定义,例如带参数的路由、任意路由、分组路由等一系列的路由处理,如下所示。
带参数的路由
定义一个带参数的 GET 请求路由:
1 2 3 4
| r.GET("/users/:id", func(c *gin.Context) { id := c.Param("id") c.String(http.StatusOK, "User id is "+id) })
|
这里使用 :id
定义了一个参数,可以使用 c.Param()
方法获取该参数的值。
匹配任意路由
在Gin中,可以使用*来匹配任意路由。
1 2 3 4 5 6
| router := gin.Default()
router.GET("/hello/*name", func(c *gin.Context) { name := c.Param("name") c.String(http.StatusOK, "Hello %s", name) })
|
分组路由
分组路由主要用来处理多个路由有相同前缀的情况,可以使用 r.Group()
方法创建一个路由分组,例如:
1 2 3 4 5 6 7 8 9
| api := r.Group("/api") { api.GET("/users", func(c *gin.Context) { // 处理 GET 请求 }) api.POST("/users", func(c *gin.Context) { // 处理 POST 请求 }) }
|
这里使用 r.Group()
方法创建了一个 /api
的路由分组,该分组下包含两个路由:/api/users
和 /api/users
,分别处理 GET 和 POST 请求。
静态路由
1 2 3 4 5 6 7 8 9
| func main() { router := gin.Default() router.Static("/assets", "./assets") router.StaticFS("/more_static", http.Dir("my_file_system")) router.StaticFile("/favicon.ico", "./resources/favicon.ico")
// 监听并在 0.0.0.0:8080 上启动服务 router.Run(":8080") }
|
处理404错误
在Gin中,可以使用NoRoute()方法处理404错误。
1 2 3 4 5 6
| router := gin.Default()
// 处理404错误 router.NoRoute(func(c *gin.Context) { c.JSON(http.StatusNotFound, gin.H{"message": "Not Found"}) })
|
路由重定向
在Gin中,可以使用Redirect()方法将一个路由重定向到另一个路由。该方法需要传入两个参数,第一个参数是HTTP状态码,第二个参数是重定向的目标路由。
下面是一个使用Redirect()方法的示例代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| func main() { router := gin.Default()
// 将 /test 重定向到 /redirect_test router.GET("/test", func(c *gin.Context) { c.Redirect(http.StatusMovedPermanently, "/redirect_test") })
// 处理 /redirect_test router.GET("/redirect_test", func(c *gin.Context) { c.JSON(http.StatusOK, gin.H{ "message": "This is a redirected page", }) })
router.Run(":8080") }
|
在上面的代码中,当访问 /test 路由时,会被重定向到 /redirect_test 路由。在 /redirect_test 路由中,会返回一个JSON响应。
以上基本涵盖了Gin路由的日常使用,在下一篇文章中,会继续介绍Gin框架的使用基础:请求参数的处理。
原文:https://www.jianshu.com/p/5dc38bdbc177