一、路由 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 package mainimport "github.com/gin-gonic/gin" func ginGet (ctx *gin.Context) { ctx.Writer.Write([]byte ("Hi Get Boy" )) } func ginPost (ctx *gin.Context) { ctx.Writer.Write([]byte ("Hi Post Boy" )) } func main () { engine := gin.Default() gin.SetMode(gin.ReleaseMode) engine.GET("/" , ginGet) engine.POST("/" , ginPost) engine.Run(":5656" ) }
运行演示结果
1 2 3 4 5 6 7 # get请求路由 $ curl -XGET http://127.0.0.1:5656/ Hi Get Boy # post请求路由 $ curl -XPOST http://127.0.0.1:5656/ Hi Post Boy
二、路由分组 在我们开发定义路由的时候,可能会遇到很多部分重复的路由:
1 2 3 /v1/users /v1/manager /v1/photo
以上等等,这些路由最前面的部分/admin/
是相同的,如果我们一个个写也没问题,但是不免会觉得琐碎、重复,无用劳动,那么有没有一种更好的办法来解决呢?Gin
为我们提供的解决方案就是分组路
类似以上示例,就是分好组的路由,分组的原因有很多,比如基于模块化,把同样模块的放在一起,比如基于版本,把相同版本的API放一起,便于使用。在有的框架中,分组路由也被称之为命名空间。
假如我们现在要升级新版本APi,但是旧的版本我们又要保留以兼容老用户。那么我们使用Gin
就可以这么做
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 package mainimport "github.com/gin-gonic/gin" func ginGetv1 (ctx *gin.Context) { ctx.Writer.Write([]byte ("Hi Getv1 Boy" )) } func ginGetv2 (ctx *gin.Context) { ctx.Writer.Write([]byte ("Hi Getv2 Boy" )) } func main () { engine := gin.Default() g1 := engine.Group("/v1" ) { g1.GET("/home" , ginGetv1) g1.GET("/index" , ginGetv1) } g2 := engine.Group("/v2" ) { g2.GET("/home" , ginGetv2) g2.GET("/index" , ginGetv2) } engine.Run(":5656" ) }
运行演示结果
1 2 3 4 5 6 7 8 9 $ curl -XGET http://127.0.0.1:5656/v1/home Hi Getv1 Boy $ curl -XGET http://127.0.0.1:5656/v1/index Hi Getv1 Boy $ curl -XGET http://127.0.0.1:5656/v2/home Hi Getv2 Boy $ curl -XGET http://127.0.0.1:5656/v2/index Hi Getv2 Boy